1.TCP/IP模型的分层
-
网络接口层(Network Interface Layer):(数据链路层)
功能:
①将数据帧发送到物理网络,并从物理网络接收数据帧。
②处理硬件地址,如MAC地址。
主要协议:Ethernet、Wi-Fi、PPP等。 -
网络层(Internet Layer):
功能:数据包的路由和寻址,以便将数据包传递到目标主机。
主要协议:IP协议是网络层的核心协议,还有其他的协议,如ICMP、ARP等。 -
传输层(Transport Layer):
功能:数据的分段和重新组装,以及数据的可靠传输。
主要协议:TCP、UDP。 -
应用层(Application Layer):
功能:提供网络应用程序与传输层之间的接口。
主要协议:HTTP、FTP、SMTP、DNS、SSH等。
2.TCP头
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
其中各字段的含义如下:
源端口号(Source Port)和目的端口号(Destination Port):用于标识发送方和接收方的应用程序。在TCP连接建立时,双方需要交换各自的端口号。
序号(Sequence Number):用于标识TCP数据流中的每个字节。每个TCP数据段都有一个序号,表示本段数据的第一个字节在整个数据流中的位置。
确认号(Acknowledgment Number):用于确认接收方已经正确接收到了发送方发送的数据。确认号表示接收方期望下一个接收的字节的序号。
数据偏移(Data Offset):指定TCP头部的长度,以4个字节为单位。取值范围为0~15,表示TCP头部长度为0 - 60字节。
控制标志(Flags):包括6个标志位,分别为URG、ACK、PSH、RST、SYN和FIN,用于控制TCP连接的建立、维护和关闭。
Flags | 含义 |
---|---|
URG(URGent) | 本数据段中包含紧急数据,紧急指针指明紧急数据的位置 |
ACK(ACKnowledgment) | 确认号有效,确认接收方已正确接收到发送方发送的数据 |
PSH(PuSH) | 表示数据应该立即被推送给应用程序,而不是在接收到更多数据后再推送 |
RST(ReSeT) | 表示连接重置,用于中断异常连接 |
SYN(SYNchronization) | 表示建立连接的请求,用于TCP三次握手。 |
FIN(FINish) | 表示关闭连接,用于TCP四次挥手 |
窗口大小(Window Size):表示发送方能够接收的数据量大小。发送方根据窗口大小来决定发送的数据量。
校验和(Checksum):用于检测TCP头部和数据的正确性。发送方在发送数据时计算校验和,并将其放在TCP头部中。
接收方在接收数据时同样计算校验和,并将其与TCP头部中的校验和进行比较,以判断数据是否正确。
紧急指针(Urgent Pointer):用于标识TCP数据段中的紧急数据。如果URG标志被设置,那么紧急指针指定的字节表示紧急数据的最后一个字节的位置。
选项(Options):TCP头中还可以包含一些可选字段,如时间戳、最大分段大小(MSS)等。这些选项的使用是可选的,取决于具体实现。
3.IP头(IPV4)
每行32位,4字节
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IP头是Internet协议(IP)中用于封装传输数据的头部信息,包含了IP协议中一些重要的控制信息。下面是IP头中各字段的具体含义:
- 版本(Version):指定IP协议的版本号,IPv4的版本号为4,IPv6的版本号为6。
- 首部长度(Header Length):指定IP头部长度,以4个字节为单位。取值范围为0~ 15,表示IP头部长度为0~60字节。
- 区分服务(Differentiated Services,DS):用于对IP数据包进行分类和区分处理,以实现不同服务等级的提供。
- 总长度(Total Length):指定整个IP数据报(包括头部和数据)的长度,以字节为单位。
- 标识(Identification):用于标识一个IP数据报的唯一性,由发送方生成。
- 标志位(Flags):用于标识IP数据报的一些属性。
- DF(Don’t Fragment):表示该数据报不允许被分片。
- MF(More Fragments):表示该数据报是一个分片,并且还有其他分片未到达目的地。
- 分段偏移(Fragment Offset):用于标识分段数据包相对于原始IP数据包中的位置。
- 生存时间(Time to Live,TTL):指定IP数据包在网络中可以经过的最大跳数。
每经过一个路由器,TTL值会减1,当TTL值为0时,数据包将被丢弃。
- 协议(Protocol):指定上层协议类型,如TCP、UDP、ICMP等。
- 头部校验和(Header Checksum):用于检测IP头部的正确性。
发送方在发送数据时计算头部校验和,并将其放在IP头部中。
接收方在接收数据时同样计算头部校验和,并将其与IP头部中的校验和进行比较,以判断数据是否正确。
- 源IP地址(Source Address)和目的IP地址(Destination Address):
用于标识发送方和接收方的IP地址。
在IP数据包经过网络传输时,每个路由器都会根据目的地址进行转发。
4.三次握手(3-way handsherk)和四次挥手 (4-way wavehand)
TCP/IP协议的三次握手和四次挥手,即建立和关闭TCP连接,可以确保数据传输的可靠性和完整性。
三次握手的过程如下:
-
第一步(SYN):客户端发送一个SYN包给服务器端,并且该包中包含了客户端初始化序列号的值。此时,客户端处于SYN_SENT状态。
-
第二步(SYN-ACK):服务器端收到SYN包后,返回一个SYN-ACK包,该包中包含了服务器端初始化序列号的值和对客户端序列号的确认。此时,服务器端处于SYN_RCVD状态。
-
第三步(ACK):客户端收到SYN-ACK包后,发送一个ACK包作为对服务器端的确认。此时,客户端处于ESTABLISHED状态,而服务器端则从SYN_RCVD状态转变为ESTABLISHED状态。
四次挥手的过程如下:
-
第一步(FIN):当客户端想要关闭连接时,它发送一个FIN包给服务器端,表明它不再发送数据。此时,客户端进入FIN_WAIT_1状态。
-
第二步(ACK):服务器端收到FIN包后,返回一个ACK包确认。此时,服务器端进入CLOSE_WAIT状态,而客户端处于FIN_WAIT_2状态。
-
第三步(FIN):当服务器端也想要关闭连接时,它发送一个FIN包给客户端,表明它不再发送数据。此时,服务器端进入LAST_ACK状态,等待客户端的确认。
-
第四步(ACK):客户端收到FIN包后,返回一个ACK包确认。此时,客户端进入TIME_WAIT状态,并且等待2MSL时间(两倍的最大报文存活时间)后,关闭连接。服务器端收到ACK包后,进入CLOSED状态。