TCP/IP

来源:互联网 发布:node.js npm init 编辑:程序博客网 时间:2024/05/16 09:09

TCP/IP协议的帧结构——半转帖

 一.网络接口层

TCP/IP协议数据报结构详解(图三)

 二.网际协议层

 TCP/IP协议数据报结构详解(图五)

  

1、Version=4,表示IP V4。该部分占4个BIT位。

2、Header Length=20 Bytes(刚好和TCP的伪头部是一样20Bytes),表示IP包头的总长度为20个字节。该部分占4个BIT位,单位为4个字节,因此,一个IP包头的长度最长为“1111”,即15*4=60个字节。

3、Type of Service=00,表示服务类型为0。该部分用二个十六进制值来表示,共占8个BIT。

8个BIT的含义是:

000 前三位不用

0 表示最小时延,如Telnet服务使用该位

0 表示吞吐量,如FTP服务使用该位

0 表示可靠性,如SNMP服务使用该位

0 表示最小代价

0 不用

4、Total Length:包含伪头部的20Bytes的长度。假如48Bytes,表示该IP包的总长度为48个字节。该部分占16个BIT,单位为Byte。在以太网中能够传输的最大IP数据包为65535个字节。

 

5、Identification,表示第几个IP包。该部分占16个BIT。

 

6、Flags,表示片标志,占3个BIT。各位含义分别为:

   第一个“0”不用;

   第二个“0”为分片标志位,“1”表示分片,“0”表示不分版本;

   第三个“0”为是否最后一片标志位,“0”表示最后一片,“1”表示还有更多的片。

7、Fragment Offset=0,表示片偏移为0个Bytes。该部分占13个BIT(这个我暂时也没懂什么意思)。

8、Time to Live=128Secongs/Hops,表示生存时间TTL值为128。该部分占8个BIT。

9、Proctol=6(TCP):

   TCP = 6;  UDP = 17; ICMP = 1;该部分占8个BIT。

10、Header Checksun=4035(correct),其实就是对这20个字节的CRC,在没有CRC之前,CRC单元先填入0,括号内的Correct表示此IP数据包是正确的,没有被非法修改过(这个correct我也不知道什么意思)。该部分占16个BIT,用十六进制表示。

11、Source Address = 192.168.2.20

12、Destination Address = 192.168.2.21

13、No Options,表示IP数据包中未使用选项部分。当需要记录路由时才使用该选项。

 三.TCP

TCP/IP协议数据报结构详解(图七)

    1、Source Port:源端口号。

  2、Destination Port:目的端口号。如果是用户使用一般只能选择1024--65535之间。

       0--1024都是系统定义的:如20,21(FTP使用),808,1080(HTTP使用)

  3、Initial Sequence Number:表示初始连接的请求号,即SEQ值。该部分占32个BIT,

       值从1--2exp(32)-1。

  4、Next EXPected SEQ Number:即对方返回的ACK值。该部分占32个BIT,

       值从1--2exp(32)-1。

  5、Data Offset:表示数据偏移的大小。该部分占4个BIT(暂时没搞懂这是什么意思)。

  6、Reserved Bites:保留位,此处不用。该部分占6个BIT。

  7、Flags=02。该值用两个十六进制数来表示。该部分长度为6个BIT,6个标志位的含义分别是:

    0 URG,紧急数据标志,为1表示有紧急数据,应立即进行传递。

    0 ACK,确认标志位,为1表示此数据包为应答数据包

    0 PSH,PUSH标志位,为1表示此数据包应立即进行传递。

    0 RST:复位标志位。如果收到不属于本机的数据包,则返回一个RST

    0 SYN:连接请求标志位。为1表示为发起连接的请求数据包。

    0 FIN:结束连接请求标志位。为1表示是结束连接的请求数据包。

  8、Window=64240,表示窗口是64240。该部分占16个BIT(好像是用来流控的)。

  9、CheckSum

  10、Urgent Pointer = 0,表示紧急指针为0。该部分占16个BIT。

  11、Maximum Segment Size=1460,表示最大段大小为1460个字节,就是一次传输最多的字节为1460。

 

通过上述分析,可以发现:在以太网中,最大传输单元MTU为1500个字节,在一个IP包中,去除IP包头的20个字节,可以传输的最大数据长度为1480个字节。在TCP包中,去除20个TCP包头,可以传输的最大数据段为1460个字节。因此,当数据超过最大数据长度时,将对该数据进行分片处理,在IP包头中会看到有多个片在传输,但标识号是相同的(对这个有保留,可能我理解错),表示是同一个数据包。