TCP/IP报文格式

一、传输层协议

 

TCP特点:

面向连接

可靠

适用于可靠性要求高的应用

开销大

UDP特点:

无连接

不可靠

适用于更关注传输效率的应用

可靠性由应用层负责

 

TCP主要功能:可靠、准确的传输并控制源主机与目的主机之间的信息流;

TCP主要职责:提供端到端的控制,通过滑动窗口机制提供流控制,通过序号和确认号机制来保证可靠性;

功能如下:

连接管理:定义了允许两个用户像直接连接一样开始交谈的规则(类似于电话通信之前须拨通对方的号码)。通常把连接的定义和建立的过程称为握手。

流量控制:以网络能普遍接受的速度发送数据,从而防止网络拥塞造成数据包的丢失。传输层独立于底层而运行。传输层的流量控制与数据链路层的流量控制区别在于,传输层定义了端到端用户之间的流量控制,数据链路层协议定义了两个中间的相邻节点的流量控制。

差错检测:数据链路层的差错检测功能提供了可靠的链路传输,但仍无法保证源点和目的之间的传输完全无错,比如网络中的路由器收到了完整无缺的ip分组,但是在将含有分组的帧重新格式化的过程中出现了影响分组内容的错误。这种错误可能是由于软件或硬件导致的。而这种错误,数据链路层无法检测到。传输层的差错检测机制可以检测到这种错误。

对用户请求的响应:包括对发送和接受数据请求的响应以及特定请求的响应,如用户可能要求高吞吐量,低延迟或可靠服务。

二、IP报文格式


URG/ACK/RSH/SYN/FIN

TCP报文格式

 

UDP数据段格式:

源端口号,目标端口号字段:占16B。作用于TCP数据段中的端口号字段相同,用来标示源段和目标端的应用程序;

长度字段:占16B。表明UDP头部和UDP数据的总长度字节;

校验和字段:占16B。用来对UDP头部和UDP数据进行校验。和TCP不同的是,对UDP来说,此字段是可选项,而TCP数据段中的校验和字段是必须有的。

TCP分段格式:

源端口号,目标端口号字段:占16B。TCP协议通过使用“端口”来标示源端和目标端的应用程序。端口号可以使用0~65535之间的任何数字。在收到服务请求时,操作系统动态的为客户端的应用程序分配端口号。在服务器端,每种服务在“众所周知的端口”为用户提供服务;

序列号字段:占32b。用来标示从TCP源端向TCP目标端发送的数据字节流,他表示在这个报文段中的第一个数据字节。

确认号字段:占32b。只有ACK标志为1时,确认号字段才有效。它包含目标端所期望收到源端的下一个数据字节。

首部字段:给出头部占32b的数目。没有任何选项字段的TCP头部长度为20b,最多可以有60b的TCP头部。

标志位字段(U,A,P,R,S,F)字段:占6b。

URG:紧急指针有效;

ACK:确认序号有效;

PSH:接收方应该尽快将这个报文段交给应用层。

RST:重建连接;

SYN:发起一个连接;

RIN:释放一个连接;

窗口大小字段:占16b。用来进行流量监控。单位为字节数,这个值是本机期望一次接收的字节数。

校验和字段:占16b。对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,并由目标端进行验证。

紧急指针字段:占16b。他是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。

可选项字段:占32b。可能包括“窗口扩大因子”、“时间戳”。

ip报文格式:

版本字段:占4b。用来表明ip协议实现的版本号;

服务类型字段:占8b。其中前3b为优先权字段。第8bit保留未用。第4值第7bit分别代表延迟、吞吐量、可靠性和花费。当值为1时,分别代表最小时延、最大吞吐量、最高可靠性和最小花费。若全为0时,表示一般服务。服务类型字段声明了数据报被网络系统传输时可以怎样处理。例如,telnet协议可能要求有最小的延迟。实际上,大部分主机会忽略这个字段,而一些动态路由协议如ospf可以根据这些字段的值进行路由决策。

总长度字段:占16b。指明整个数据报的长度;

标示符字段:占16b。用来唯一标示主机发送的每一份报文,通常每发一份他的值会加1;

标志字段:占3b。标志一份数据报是否要求分段;

片偏移字段:占13b。用来如果一份数据报要求分段的话,此字段指明该段偏移距原始数据报开始的位置;

生存期字段:占8b。用来设置数据报最多可以经过的路由器数量,有发送数据的源主机设置,通常为32,64,128等。每经过一个路由器,其值减1,直到0时该数据报被丢弃。

协议字段:占8b。指明ip层所封装的上层协议类型,如icmp(1),igmp(2),tcp(6),udp(17).

套接字:把一个ip地址和一个端口号合称为套接字。套接字对可以唯一的确定互联网中每个TCP连接的双方(客户ip地址、客户端口号、服务器ip、服务器端口号)

三、TCP/IP数据传输

1.1TCP连接建立、释放时的握手过程


为什么是三次握手,而挥手需要四次?

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没收到确认的确认,不会认为连接已经建立好了,只会反复重传以前的确认分段。但如果在这样重复的对上一次的动作做确认,就回进入无休止的确认中。所以,在效率与可靠性的权衡中取了三次握手来尽可能的保证连接的可靠,同时也保证了一定的效率。

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。这是一种指数增加的关系。

时间: 2024-10-12 16:28:27

TCP/IP报文格式的相关文章

以太网帧、IP报文格式

这几天完成一个对比以太网帧的程序(c语言),老师给了以太网帧头部和IP报文头部的结构体,跟实际抓取到的数据包的格式是相同的. 以太网帧头部的数据结构: typedef struct { unsigned char dest_mac[6]; unsigned char src_mac[6]; unsigned short eth_type; } ethernet_header; eth_type字段用来指明上层协议类型,两字节.eth_type字段常见值及对应协议 0x0800 网际协议(IP)

IP报文格式详解

下图为常见的IP报文格式表: 上面是IP的报文格式,接下来我们先说明各个字段的意义.然后,用Etheral软件转包分析IP的报文格式. 1.版本:ip报文中,版本占了4位,用来表示该协议采用的是那一个版本的ip,相同版本的ip才能进行通信.一般此处的值为4,表示ipv4. 2.头长度:该字段用四位表示,表示整个ip包头的长度,其中数的单位是4字节.即二进制数0000-1111(十进制数0-15),其中一个最小长度为0字节,最大长度为60字节.一般来说此处的值为0101,表示头长度为20字节. 3

TCP/IP报文 三次握手 四次挥手

1.TCP报文格式  TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图:图1 TCP报文格式  上图中有几个字段需要重点介绍下:  (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记.  (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1.  (3)标志位:共6个,即URG.ACK.PSH.RST.SYN.FIN等,具体含义如下:  (A)URG:紧急指针

TCP/IP报文头部结构

IP协议 IP协议是TCP/IP协议族的动力,它为上层协议提供无状态.无连接.不可靠的服务. 优点:简单,高效. IPv4首部一般是20字节长.在以太网帧中,IPv4包首部紧跟着以太网帧首部,同时以太网帧首部中的协议类型值设置为0800无状态:IP通信双方不同步传输数据的状态信息,所有的IP数据报的传输都是独立的.所以容易发生重复和乱序的情况并且IP层不予处理. 然后将这些乱序的交给上层传输层(TCP/UDP等)来处理,将其处理成有序的,正确的.再交给应用层. 不可靠:IP协议不能保证IP数据报

使用wireshark分析tcp/ip报文之报文头

以太网报文的结构如下: 其中,以太网的帧头: 14 Bytes:MAC目的地址48bit(6B),MAC源地址48bit(6B),Type域2B,一共14B. IP头部: TCP头部: http://blog.163.com/[email protected]/blog/static/618945432011101110497885/ http://www.cnblogs.com/zhuzhu2016/p/5797534.html 也就是报文的头部一共有54字节.下面以一个简单的http请求查看

IP报文格式及各字段意义

IP数据包由报头和数据两部分组成.报头的前一部分是固定长度,共20字节.在报头的固定部分的后面是可选部分--IP选项和填充域. 首部各字段的含义如下 1.版本 占4位,指IP协议的版本. 2.报头长度 占4位,该字段的单位是32位字(1个32位字长是4字节),因此当IP报头长度为1111时,报头长度就达到最大值60字节.当IP分组的首部长度不是4字节的整数倍是,就需要对填充域加以填充.最常用的报头长度为20位(报头长度值为0101),这时不使用任何选项. 3.区分服务(服务类型) 占8位,在一般

(转载)TCP/IP四层模型

本文章转载地址:http://www.cnblogs.com/BlueTzar/articles/811160.html TCP/IP参考模型 ISO制定的OSI参考模型的过于庞大.复杂招致了许多批评.与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用.如图2-1所示,是TCP/IP参考模型和OSI参考模型的对比示意图.            图2-1 TCP/IP参考模型 2.1 TCP/IP参考模型的层次结构 TCP/IP协议栈是美国国防部高级研究计划局计算机网(Advan

TCP/IP分析

TCP/IP四层模型 TCP/IP参考模型 ISO制定的OSI参考模型的过于庞大.复杂招致了许多批评.与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用.如图2-1所示,是TCP/IP参考模型和OSI参考模型的对比示意图. 图2-1 TCP/IP参考模型 2.1 TCP/IP参考模型的层次结构 TCP/IP协议栈是美国国防部高级研究计划局计算机网(Advanced Research Projects Agency Network,ARPANET)和其后继因特网使用的参考模型.A

OSI七层协议模型和TCP/IP四层模型比较

TCP/IP四层模型 ISO制定的OSI参考模型的过于庞大.复杂招致了许多批评.与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用.如图2-1所示,是TCP/IP参考模型和OSI参考模型的对比示意图. 图2-1 TCP/IP参考模型 2.1 TCP/IP参考模型的层次结构 TCP/IP协议栈是美国国防部高级研究计划局计算机网(Advanced Research Projects Agency Network,ARPANET)和其后继因特网使用的参考模型.ARPANET是由美国国