ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

计算机网络——TCP/IP

2022-03-21 19:02:55  阅读:175  来源: 互联网

标签:发送 IP 报文 TCP 计算机网络 服务器 DHCP 客户端


 

都是下一层给上一层提供服务的。

(1)应用层专注于为用户提供应用功能,不用关心数据如何传输。

(2)传输层负责应用到应用的通信。在传输层上,如果数据包的大小超过MSS(TCP最大报文段长度),就要将数据包分块。这样即使中途有一个分块丢失或损坏,只需要重新这一个分块,而不用重新发送整个数据包。

(3)网络层负责将数据从一个设备传输到另一个设备(IP协议进行寻址,告诉我们去往下一个目的地该朝着哪个方向走,路由是根据下一个目的地选择路径)。在网络层上,如果IP报文大小超过MTU(以太网中一般为1500字节)就会再次进行分片,得到一个即将发送到网络的IP报文。

补充:TCP协议和UDP协议的分片方式不同。TCP的数据大小如果大于MSS大小,会在传输层进行分片,目标主机收到后,也同样在传输层组装数据包。如果中途丢失一个分片,只需要传输丢失的这个分片。UDP的数据大小如果大于MTU大小,则会在IP层进行分片,目标主机收到之后,在IP层组装完数据,接着传给传输层。但是如果中途丢失一个分片,实现可靠传输的UDP时就需要重传所有的数据包,这样传输效率非常差。所以通常UDP的报文应该小于MTU。

(4)数据链路层服务网络层,实现跨网络传输(有一个设备同时在两个网络中就是路由器)。每个网卡都有MAC地址,路由器计算下一个目的地IP后,再通过ARP协议找到目的地MAC,就可以知道要传到哪个设备。

(5)物理层实现设备和网络之间的数据传送。比如从设备发送到网络,要把数据包转换成电信号,让其可以在物理介质中传输。

 

TCP协议

标志位(控制位)有ACK/RST/SYN/FIN。序列号。确认应答号。

三次握手:

标志位(控制位)SYN和ASK,序列号seq(随机生成),应答号ask(下一次期望收到数据的序列号)
一开始客户端是close,然后发送标志位SYN,发送序列号之后变成SYN_SEND,然后接收服务器发来的应答就变成ESTABLISH。


三次握手是为了保证通信双方都具有接收和发送的能力。更重要的是防止历史连接的建立、减少双方不必要的资源开销,帮助双方同步初始化序列号。详细原因如下:

(1)主要为了防止已经失效的连接请求报文段突然又传输到了服务端,导致产生问题。确认应答号是指下一次期望收到的数据的序列号。客户端发送多次SYN去建立连接,旧报文90比新报文100先到达服务端。服务端返回ACK,客户端通过上下文比较,发现自己期望收到的ACK应该是100+1,于是发起RST报文终止连接。

客户端判断后,如果是旧历史连接就要终止连接。如果只有两次握手就不能终止连接。

(2)同步双方的初始化序列号。

(3)避免资源的浪费。服务端收到客户端都会发送应答,客户端多次阻塞就会建立很多很多连接。

 

四次挥手:

一开始客户端和服务器都是ESTABLISH。客户端先向服务器发出连接释放报文段FIN=1/seq=x,并且停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1的状态。服务器收到连接释放报文段以后就发送应答标志位和应答信号,服务端进入CLOSE_WAIT的等待关闭状态,此时TCP处于半关闭的状态,客户端不能再发数据给服务器(但客户端可能还有数据要发送)

客户端收到服务器的应答之后,进入FIN-WAIT2状态,等待服务器发出的连接释放报文段。
服务器发送完应答数据之后,就会再次发送连接释放报文段(此时应答标志位和应答信号和前面一样?)服务器进入LAST_ACK最后确认的状态,等待A的确认。客户端收到服务器的连接释放信号以后,进入TIME_WAIT的状态,此时TCP没有完全释放,服务器依旧可以向客户端发送,等到2msl,客户端才进入CLOSE状态。服务器收到客户端发送的确认报文段后关闭连接,如果没有收到,就会重传连接释放信号。


2msl是为了保证客户端最后发送的确认报文段能够到达服务器,如果丢失了服务器还会重传连接释放信号。此外,2msl还可以防止已经失效的连接释放报文段再次出现在本连接中。客户端在发送最后一个应答信号之后,再经过2msl,就可以使得这个连接所产生的所有报文段都从网络中消失。


为什么要四次挥手?因为一开始是客户端要释放连接的,但是服务器不知道,可能这时候服务器还有要发送给客户端的东西。所以服务器在收到客户端的释放要求之后,先应答一下,等到服务器把想发送的都发送完了之后,再跟客服端发送关闭信号,使得客户端关闭(TIME_WAIT)。然后客户端应答,然后服务器彻底关闭。

 

TCP的特点有哪些?TCP是面向连接的传输层协议,而且他是点对点的,能够提供可靠交付的服务,提供全双工的通信,面向的是字节流。


TCP和UDP的不同。TCP是面向连接的,而UDP在发送数据之前,不需要建立连接。TCP是可靠的,而UDP不提供可靠交付。TCP面向字节流,而UDP面向报文。TCP有拥塞控制,而UDP没有,因此网络拥塞不会引起发送端速率降低,很适合在传输视频会议。TCP只能点到点,而UDP都可以。TCP首部开销20字节,而UDP只有8字节。

 

重传机制。主要有超时重传(以时间为驱动)、快速重传(以数据为驱动)。

快速重传只解决了时间的问题,但是重传的时候是重传之前的一个,还是重传所有的问题依旧存在。

因此出现了SACK方法、Duplicate SACK方法。

 

滑动窗口。窗口大小就是指无需等待确认应答,就可以继续发送数据的最大值。窗口的实现实际就是操作系统开辟的一个缓存空间,发送方主机等到确认应答返回之前,必须在缓冲区保存已经发送的数据。如果准时收到确认应答,数据就可以从缓存区清除。

发送方发送的数据大小不能超过接收方的窗口大小,否则接收方就无法正常接收到数据。所以,通常窗口的大小都是由接收方的窗口大小决定的。

发送方滑动窗口使用三个指针来跟踪在四个传输类别中的每一个类别中的字节,其中两个指针是绝对指针(指特定的序列号),一个指针是相对指针(需要做偏移)。可用窗口的大小=SND.WND - (SND.NXT - SND.UNA)

接收方的滑动窗口使用RCV.WND和RCV.NXT两个指针。

因为发送方的大小是由接受方返回的ACK信号决定的,所以接收窗口和发送窗口只能是约等于的关系。

 

流量控制。如果发送方一直无脑发数据给接收方,但是对方处理不过来,就会触发重发机制,浪费网络流量。

如果接收方窗口为0告诉发送方,就会阻止发送方给接收方发送数据,直到窗口大小变成非0,这就是窗口关闭。但是这种窗口关闭操作很容易造成问题。因为接收方给发送方通知窗口大小的时候,是通过ACK报文来通知的。如果这个报文丢失了,会导致发送方一直等待接收方的非0窗口通知,接收方也一直等待发送方的数据。如果不采取措施,这种相互等待的过程会造成死锁现象。

 

拥塞控制。

 

IP协议

网络层负责在没有直连的两个网络之间进行通信传输,数据链路层负责实现直连的两个设备之间的通信。网络层相当于行程表,数据链路层相当于车票。

IPv4地址是由32位正整数来表示的,在计算机中以二进制方式处理,最大值也就是2^32=43亿台电脑连接到网络。32位分别为网络号和主机号。在IP地址中,主机号全为0和全为1的地址比较特殊。

全为1表示某个网络下的所有主机,用于广播。全为0指定某个网络。

当IP数据包大于MTU的时候,IP数据包就会被分片。经过分片后的IP数据报在重组的时候,只能由目标主机执行,路由器是不会进行重组的。在分片传输的过程中,一旦某个分片丢失,则会造成整个IP数据报作废,所以TCP引入了MSS,也就是在TCP层进行分片不由IP层分片,那么对于UDP我们尽量不要发送一个大于MTU的数据报文。

IPv6地址是128位的。

(1)DNS域名解析。

DNS解析过程,就是域名变成IP的过程。先找浏览器的DNS缓存,没有就找操作系统的DNS缓存和host文件,没有就找本地域名服务器,没有就找根域名服务器,顶级域名服务器(com),权限域名服务器(server.com),返回IP给本地域名服务器缓存。返回给操作系统DNS缓存。浏览器得到IP。

(2)ARP和RARP协议。传输一个IP数据报的时候,确定了源IP地址和目标IP地址之后,就会通过主机路由表,确定IP数据包的吓一跳。网络层的下一层就是数据链路层,所以我们还要知道下一跳的MAC地址。

主机会通过广播发送ARP请求,这个包里面包含了想要知道的MAC地址的主机IP地址。当同链路中的所有设备都收到ARP请求的时候,就会拆开ARP请求包的内容,如果ARP请求包中的目标IP地址和自己的IP地址一致,这个设备就会把自己的MAC地址放到ARP响应包返回给主机。获取过一次就会缓存,但是缓存也有有期限。

RARP协议是已知MAC地址求IP地址。比如将打印机等小型嵌入式设备接入网络就会经常用到。

(3)DHCP动态获取IP地址。

我们的电脑通常是通过DHCP动态获取IP地址,大大省去配IP信息繁琐的过程。

DHCP客户端进程监听的是68端口号,DHCP服务端进程监听的是67端口号。

客户端发起DHCP发现报文,使用UDP广播通信,其使用的广播目的地址是255.255.255.255(端口67),并且使用0.0.0.0(端口68)作为源IP地址。DHCP客户端把该IP数据包传递给数据链路层,链路层将帧广播到所有的网络中设备。

DHCP服务器收到发现报文的时候,用DHCP提供报文向客户端做出响应。该报文信息携带服务器提供可租约的IP地址、子网掩码、默认网关、DNS服务器以及IP地址租用期,仍然使用IP广播地址255.255.255.255。客户端收到一个或多个服务器的DHCP报文后,从中选择一个服务器,并向选中的服务器发送DHCP请求报文进行响应,回显配置的参数。最后,服务器用DHCP ACK报文对DHCP请求报文进行响应,应答所要求的参数。

如果租约的DHCP IP地址快到期,客户端就会向服务端发送DHCP请求报文。服务器如果同意续租,则用DHCP ACK报文进行应答,客户端就会延长租期。如果不同意续租,则用DHCP NACK报文,客户端就要停止使用租约的IP地址。

如果DHCP服务器和客户端不在一个局域网内,就使用DHCP中继代理。DHCP客户端会向DHCP中继代理发送DHCP请求包,而DHCP中继代理在收到这个广播包之后,再以单播的形式发给DHCP服务器。服务端收到该包以后,向DHCP中继代理返回应答,并由DHCP中继代理将此包广播给DHCP客户端。因此,DHCP服务器即使不在同一个链路上也可以实现统一分配和管理IP地址。

(4)NAT网络地址转换。NAT就是同一个公司的主机对外通信的时候,把私有的IP地址转换成共有的IP地址。生成一个NAPT路由器的转换表,就可以正确转换地址和端口的组合,令客户端A和B能同时和服务器之间进行通信。这种转换表在NAT路由器上自动生成。例如,在TCP的情况下,建立TCP连接首次握手的时候的SYN包一旦发出,就会生成这个表。然后随着收到关闭连接的时候发出FIN包的确认应答从表中被删除。

(5)ICMP互联网控制报文协议。

网络包在复杂的网络传输环境里,常常会遇到各种问题。当遇到问题的时候,需要传出消息,报告遇到了什么问题,才可以调整传输策略,以此来控制整个局面。ICMP的主要功能包括:确认IP包是否成功送达目标地址;报告发送过程中IP包被废弃的原因和改善网络设置等等。

ICMP的通知消息会使用IP进行发送。ICMP大致可以分成两大类。

一类是用于诊断的查询消息,也就是查询报文类型。0表示回送应答,8表示回送请求。这是ping的原理,可以向对端主机发送回送请求的消息8,也可以接收对端主机发回来的回送应答消息0.

另一类是通知出错原因的错误消息,也就是差错报文类型。3表示目标不可达,4表示原点抑制,5表示重定向或改变路由,11表示超时。IP路由器无法将IP数据包发送给目标地址的时候,会给发送端主机返回一个目标不可达的ICMP消息,并在这个消息中显示不可达的具体原因,原因记录在ICMP包头的代码字段。网络不可达代码为0,主机不可达代码为1,协议不可达代码为2,端口不可达代码为3,需要进行分片但是设置了不分片位的代码为4。

 

标签:发送,IP,报文,TCP,计算机网络,服务器,DHCP,客户端
来源: https://www.cnblogs.com/Candy003/p/16036012.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有