TCP&UDP报文格式

TCP&UDP报文格式

ID:39468707

大小:233.50 KB

页数:10页

时间:2019-07-04

TCP&UDP报文格式_第1页
TCP&UDP报文格式_第2页
TCP&UDP报文格式_第3页
TCP&UDP报文格式_第4页
TCP&UDP报文格式_第5页
资源描述:

《TCP&UDP报文格式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、TCP/UDP报文格式   TCP协议为终端设备提供了面向连接的、可靠的网络服务,UDP协议为终端设备提供了无连接的、不可靠的数据报服务。从上图我们可以看出,TCP协议为了保证数据传输的可靠性,相对于UDP报文,TCP报文头部有更多的字段选项。首先让我们来看一下TCP的报文头部主要字段:   每个TCP报文头部都包含源端口号(sourceport)和目的端口号(destinationport),用于标识和区分源端设备和目的端设备的应用进程。在TCP/IP协议栈中,源端口号和目的端口号分别与源IP地址和目的IP地址组成套接字(socket),唯

2、一的确定一条TCP连接。   序列号(Sequencenumber)字段用来标识TCP源端设备向目的端设备发送的字节流,它表示在这个报文段中的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用序列号对每个字节进行计数。序列号是一个32bits的数。   既然每个传输的字节都被计数,确认序号(Acknowledgementnumber,32bits)包含发送确认的一端所期望接收到的下一个序号。因此,确认序号应该是上次已成功收到的数据字节序列号加1。   TCP的流量控制由连接的每一端通过声明的窗口大小(windowssize

3、)来提供。窗口大小用数据包来表示,例如Windowssize=3,表示一次可以发送三个数据包。窗口大小起始于确认字段指明的值,是一个16bits字段。窗口大小可以调节。   校验和(checksum)字段用于校验TCP报头部分和数据部分的正确性。   最常见的可选字段是MSS(MaximumSegmentSize,最大报文大小)。MSS指明本端所能够接收的最大长度的报文段。当一个TCP连接建立时,连接的双方都要通告各自的MSS协商可以传输的最大报文长度。我们常见的MSS有1024(以太网可达1460字节)字节。    相对于TCP报文,UDP

4、报文只有少量的字段:源端口号、目的端口号、长度、校验和等,各个字段功能和TCP报文相应字段一样。   UDP报文没有可靠性保证和顺序保证字段,流量控制字段等,可靠性较差。当然,使用传输层UDP服务的应用程序也有优势。正因为UDP协议较少的控制选项,在数据传输过程中,延迟较小,数据传输效率较高,适合于对可靠性要求并不高的应用程序,或者可以保障可靠性的应用程序像DNS、TFTP、SNMP等;UDP协议也可以用于传输链路可靠的网络。UDP报文UDP报头定长为8B。按顺序为:1,UInt16源端口号关于端口号有一些规定,服务器端通常用熟知端口号,通常

5、在0-1023之间。而客户端用随机的端口号,其范围在49152到65535之间。2,UInt16目的端口号3,UInt16总长度包括报头和数据的长度之和。显然在[8,65535]区间。4,UInt16检验和如果不需要检验和,就取0。如果需要检验和,那么其算法为:(1)构造12B的伪报头UInt32源IP+UInt32目的IP+Byte0+Byte17+UInt16总长度(上面所说的)(2)UDP的报头(3)UDP的数据部分unsafeUInt16计算校验和(UInt16*buffer,intsize){Int32cksum=0;intcoun

6、ter;counter=0;while(size>0){UInt16val=buffer[counter];cksum+=Convert.ToInt32(buffer[counter]);counter+=1;size-=1;}cksum=(cksum>>16)+(cksum&0xffff);cksum+=(cksum>>16);return(UInt16)(~cksum);}构造UDP报文(含有检验和)需要的输入参数包括:UInt32源IP、UInt32目的IP、UInt16源端口号、UInt16目的端口号、Byte[]数据部分、Uint1

7、6数据部分的长度publicByte[]构造UDP数据报(UInt32源IP,UInt32目的IP,UInt16源端口号,UInt16目的端口号,Byte[]数据部分,UInt16数据部分的长度){UInt16总长度=(UInt16)(8+数据部分的长度);UInt16校验和=0;//网络字节顺序源IP=(uint)IPAddress.HostToNetworkOrder((int)源IP);目的IP=(uint)IPAddress.HostToNetworkOrder((int)目的IP);源端口号=(ushort)IPAddress.Ho

8、stToNetworkOrder((Int16)源端口号);目的端口号=(ushort)IPAddress.HostToNetworkOrder((Int16)目的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。