TCP/IP报文格式
2015-07-02 11:43
330 查看
一、传输层协议
二、IP报文格式
1.2TCP可靠传输技术
当TCP连接建立后,为保证数据传输的可靠性,需要对传输的数据进行确认。首先,TCP对每一个分段都做了32为的编号,称为序列号。每一个分段都按照从起始号递增的顺序进行编号。每一次传输数据时表明该段的编号,以便对方确认。确认不需要单独发包做确认,可以放在传到对方的TCP分段中,在TCP协议中并不直接确认收到哪些分段,而是通知发送方下一次该发送哪一个分段,表示前面的分段都已经收到,如果收到分段后没有分段要马上传到对方,TCP协议的确认通常采用延时几分之一秒后再做确认,而不是收到一个确认一个,接收端可能收到从X到X+N的N个后才开始确认,直接在确认字段中标X+N+1,通知对方下一次直接传N+X+1分段,这样减少确认的次数增加确认的效率。如果M(M《N)分段在传输中出错,则确认X+M通知发送方从X+M开始重传X+M分段以及以后所有分段。 1.3TCP流量控制 滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。 对ACK的再认识,ack通常被理解为收到数据后给出的一个确认ACK,ACK包含两个非常重要的信息:一是期望接收到的下一字节的序号。举个例子,假如接收端收到1-1024字节,它会发送一个确认号为1025的ACK,但是接下来收到的是 2049-3072,它是不会发送确认号为3072的ACK,而依旧发送1025的ACK。 二是当前的窗口大小m;
在这个图中,我们将字节从1至11进行标号。接收方通告的窗口称为提出的窗口,它覆盖了从第4字节到第9字节的区域,表明接收方已经确认了包括第3字节在内的数据,且通告窗口大小为6。我们知道窗口大小是与确认序号相对应的。发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送。当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个边沿的相对运动增加或减少了窗口的大小。我们使用三个术语来描述窗口左右边沿的运动:称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。
当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了T C P的接收缓存时。
当右边缘向左移动时,称之为窗口收缩。
1.4拥塞窗口 迄今为止,在本章所有的例子中,发送方一开始便向网络发送多个报文段,直至达到接收方通告的窗口大小为止。当发送方和接收方处于同一个局域网时,这种方式是可以的。但是如果在发送方和接收方之间存在多个路由器和速率较慢的链路时,就有可能出现一些问题。一些中间路由器必须缓存分组,并有可能耗尽缓存,[Jacobson 1988]证明了这种连接方式是如何严重降低了TCP连接的吞吐量的。现在,TCP需要支持一种被称为“慢启动(slow start)”的算法。该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。慢启动为发送方的TCP增加了另一个窗口:拥塞窗口(congestion window),记为cwnd。当与另一个网络的主机建立TCP连接时,拥塞窗口被初始化为1个报文段(即另一端通告的报文段大小)。每收到一个ACK,拥塞窗口就增加一个报文段(cwnd以字节为单位,但是慢启动以报文段大小为单位进行增加)。发送方取拥塞窗口与通告窗口中的最小值作为发送上限。拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。发送方开始时发送一个报文段,然后等待ACK。当收到该ACK时,拥塞窗口从1增加为2,即可以发送两个报文段。当收到这两个报文段的ACK时,拥塞窗口就增加为4。这是一种指数增加的关系。
TCP特点:面向连接可靠适用于可靠性要求高的应用开销大 UDP特点:无连接不可靠适用于更关注传输效率的应用可靠性由应用层负责 | TCP主要功能:可靠、准确的传输并控制源主机与目的主机之间的信息流;TCP主要职责:提供端到端的控制,通过滑动窗口机制提供流控制,通过序号和确认号机制来保证可靠性;功能如下:连接管理:定义了允许两个用户像直接连接一样开始交谈的规则(类似于电话通信之前须拨通对方的号码)。通常把连接的定义和建立的过程称为握手。流量控制:以网络能普遍接受的速度发送数据,从而防止网络拥塞造成数据包的丢失。传输层独立于底层而运行。传输层的流量控制与数据链路层的流量控制区别在于,传输层定义了端到端用户之间的流量控制,数据链路层协议定义了两个中间的相邻节点的流量控制。差错检测:数据链路层的差错检测功能提供了可靠的链路传输,但仍无法保证源点和目的之间的传输完全无错,比如网络中的路由器收到了完整无缺的ip分组,但是在将含有分组的帧重新格式化的过程中出现了影响分组内容的错误。这种错误可能是由于软件或硬件导致的。而这种错误,数据链路层无法检测到。传输层的差错检测机制可以检测到这种错误。对用户请求的响应:包括对发送和接受数据请求的响应以及特定请求的响应,如用户可能要求高吞吐量,低延迟或可靠服务。 |
为什么是三次握手,而挥手需要四次?TCP数据传输是全双工的,是双向的,接收到FIN时意味将没有数据再发来,但是还是可以继续发送数据。 | TCP三次握手:第1步,首先由客户端向服务器发起连接,将数据包的序列号标为X,SYN置位,由于是双方发起的第一次连接,所以确认号为0。第2步,服务器端收到客户端发来的连接请求后,将对连接请求作出应答。客户端主机发送一个随机序列号为Y的数据包给客户端,同时确认号置为X+1,SYN置位。第3步,客户端收到服务器端的连接确认后,对该数据包在做确认。发送一个序列号为X+1,确认号为Y+1的数据包给对方。这样一个双向的TCP连接建立好了。 这样就可以传输数据了,当数据结束之后,就需要断开连接,过程如图,FIN:结束段,用来描述终止一个连接的消息。 TCP三次握手是如何保证连接的可靠性? 如果接收方B在收到发送方A的连接请求分段N后,发送确认分段M后就开始等待数据。由于网络层ip的不可靠,可能使得确认信息丢失,这样会使得发送方A认为接收方B没有确认,而事实上,接收方正在等待发送方传送数据分段确认,为避免接收方盲目等待,接受方B要收到发送方的对他的确认后才开始等待,如果没有收到发送方的确认,他将认为自己的确认丢失了,将反复重传刚才的确认分段M。对于发送方也一样,在收到B的确认后,立即对B的确认做确认,然后开始发送数据。但如果A发送的对B的确认分段丢失了,B没收到确认的确认,不会认为连接已经建立好了,只会反复重传以前的确认分段。但如果在这样重复的对上一次的动作做确认,就回进入无休止的确认中。所以,在效率与可靠性的权衡中取了三次握手来尽可能的保证连接的可靠,同时也保证了一定的效率。 |
当TCP连接建立后,为保证数据传输的可靠性,需要对传输的数据进行确认。首先,TCP对每一个分段都做了32为的编号,称为序列号。每一个分段都按照从起始号递增的顺序进行编号。每一次传输数据时表明该段的编号,以便对方确认。确认不需要单独发包做确认,可以放在传到对方的TCP分段中,在TCP协议中并不直接确认收到哪些分段,而是通知发送方下一次该发送哪一个分段,表示前面的分段都已经收到,如果收到分段后没有分段要马上传到对方,TCP协议的确认通常采用延时几分之一秒后再做确认,而不是收到一个确认一个,接收端可能收到从X到X+N的N个后才开始确认,直接在确认字段中标X+N+1,通知对方下一次直接传N+X+1分段,这样减少确认的次数增加确认的效率。如果M(M《N)分段在传输中出错,则确认X+M通知发送方从X+M开始重传X+M分段以及以后所有分段。 1.3TCP流量控制 滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。 对ACK的再认识,ack通常被理解为收到数据后给出的一个确认ACK,ACK包含两个非常重要的信息:一是期望接收到的下一字节的序号。举个例子,假如接收端收到1-1024字节,它会发送一个确认号为1025的ACK,但是接下来收到的是 2049-3072,它是不会发送确认号为3072的ACK,而依旧发送1025的ACK。 二是当前的窗口大小m;
在这个图中,我们将字节从1至11进行标号。接收方通告的窗口称为提出的窗口,它覆盖了从第4字节到第9字节的区域,表明接收方已经确认了包括第3字节在内的数据,且通告窗口大小为6。我们知道窗口大小是与确认序号相对应的。发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送。当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个边沿的相对运动增加或减少了窗口的大小。我们使用三个术语来描述窗口左右边沿的运动:称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。
当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了T C P的接收缓存时。
当右边缘向左移动时,称之为窗口收缩。
1.4拥塞窗口 迄今为止,在本章所有的例子中,发送方一开始便向网络发送多个报文段,直至达到接收方通告的窗口大小为止。当发送方和接收方处于同一个局域网时,这种方式是可以的。但是如果在发送方和接收方之间存在多个路由器和速率较慢的链路时,就有可能出现一些问题。一些中间路由器必须缓存分组,并有可能耗尽缓存,[Jacobson 1988]证明了这种连接方式是如何严重降低了TCP连接的吞吐量的。现在,TCP需要支持一种被称为“慢启动(slow start)”的算法。该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。慢启动为发送方的TCP增加了另一个窗口:拥塞窗口(congestion window),记为cwnd。当与另一个网络的主机建立TCP连接时,拥塞窗口被初始化为1个报文段(即另一端通告的报文段大小)。每收到一个ACK,拥塞窗口就增加一个报文段(cwnd以字节为单位,但是慢启动以报文段大小为单位进行增加)。发送方取拥塞窗口与通告窗口中的最小值作为发送上限。拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。发送方开始时发送一个报文段,然后等待ACK。当收到该ACK时,拥塞窗口从1增加为2,即可以发送两个报文段。当收到这两个报文段的ACK时,拥塞窗口就增加为4。这是一种指数增加的关系。
相关文章推荐
- 如何安装并使用 Wireshark
- 路由器启动的顺序
- 路由器基础配置及传输协议
- 管理与维护宽带路由器的注意事项
- C#实现数据包加密与解密实例详解
- wireshark抓取本地回环数据包和取出数据的方法
- python基础教程之获取本机ip数据包示例
- telnet实验
- 如何利用路由器防止Dos***
- 宽带路由器:WAN口
- Qno侠诺 QVM100多WAN口路由器
- Qno侠诺路由器ARP病毒防制方案
- 湖南“侠诺”多WAN口路由器,实现策略路由,限制P2P,网吧高性能路由
- 侠诺千兆多WAN网吧路由器,实现带宽管理,流量控制,限制所需要的P2P软件
- 忘记路由器密码怎么办
- 路由器配置命令(汇总)
- 路由器NAT功能的配置
- QQ蠕虫的行为检测方法[www.freebuf.com]
- 路由器封P2P的终极方案