1.TCP/IP模型的分层
1.1网络接口层(Network Interface Layer):(数据链路层)
功能:
①将数据帧发送到物理网络,并从物理网络接收数据帧。
②处理硬件地址,如MAC地址。
主要协议:
Ethernet、Wi-Fi、PPP等。
1.2网络层(Internet Layer):
功能:
数据包的路由和寻址,以便将数据包传递到目标主机。
主要协议:
IP、ICMP、IGMP
-IP协议(Internet Protocol,互联网协议)
提供无连接的、不可靠的数据报服务。
主要作用是实现数据包在网络中的传输和路由,
它定义了数据包的格式和传输方式。
-ICMP协议(Internet Control Message Protocol,互联网控制报文协议)
在IP协议基础上工作,用于在网络中传输错误信息和控制信息。
主要作用是向网络中的设备提供错误和异常的通知,
以及实现诸如ping等网络诊断工具的功能。
-IGMP协议(Internet Group Management Protocol,互联网组管理协议)
用于IP多播的协议,
用于在主机和路由器之间交换多播组成员信息,
以便使网络中的设备能够加入和离开多播组。
主要作用是管理多播组成员信息,以便网络中的设备能够进行正确的多播数据传输。
1.3传输层(Transport Layer):
功能:
数据的分段和重新组装,以及数据的可靠传输。
主要协议:
TCP、UDP。
-TCP(Transmission Control Protocol,传输控制协议)
提供端到端的数据传输服务
特点:
面向连接,可靠传输,
有流量控制和拥塞控制机制,
支持全双工通信
-UDP(User Datagram Protocol,用户数据报协议)
用于不需要可靠传输和流量控制的应用程序,比如DNS、TFTP等。
特点:
无连接,不可靠传输,支持广播和多播等。
1.4应用层(Application Layer):
功能:
提供网络应用程序与传输层之间的接口。
主要协议:
HTTP、FTP、SMTP、DNS、SSH等。
-HTTP:Hypertext Transfer Protocol(超文本传输协议)
应用于Web浏览器和Web服务器之间的通信。
是一种无状态协议,
也就是说每个请求与响应之间是相互独立的。
-FTP:File Transfer Protocol(文件传输协议)
主要用于在网络上进行文件的传输。
通过使用用户名和密码来控制对文件的访问权限。
-SMTP:Simple Mail Transfer Protocol(简单邮件传输协议)
用于电子邮件的传输。
通常使用25号端口,
支持文本和二进制数据的传输。
-POP3:Post Office Protocol version 3(邮局协议版本3)
一种用于从邮件服务器上检索电子邮件的协议。
通常使用110号端口,
支持简单的文本协议。
-IMAP:Internet Message Access Protocol(互联网邮件访问协议)
用于从邮件服务器上检索电子邮件的协议,
与POP3不同的是,它允许用户在服务器上创建、删除和移动邮件。
-Telnet:Telecommunication Network(电信网络)+ Terminal(终端)(远程登录协议)
允许用户从一台计算机上登录到另一台计算机,
并在远程计算机上运行应用程序。
-SSH:Secure Shell(安全外壳协议)
用于远程登录的安全协议,
使用加密技术来保护登录过程中传输的数据。
-DNS:Domain Name System(域名系统)
用于将域名(如www.example.com)转换为IP地址(如192.0.2.1)。
通常使用53号端口。
-DHCP:Dynamic Host Configuration Protocol(动态主机配置协议)
用于为计算机自动分配IP地址、子网掩码、网关等网络配置信息。
通常使用67号端口(服务器)和68号端口(客户端)。
2.TCP头
每行32位,4字节
0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
其中各字段的含义如下:
2.1源端口号(Source Port)和目的端口号(Destination Port):
用于标识发送方和接收方的应用程序。
在TCP连接建立时,双方需要交换各自的端口号。
2.2序号(Sequence Number):
用于标识TCP数据流中的**每个字节**。
每个TCP数据段都有一个序号,
表示本段数据的第一个字节在整个数据流中的位置。
2.3确认号(Acknowledgment Number):
用于确认接收方已经正确接收到了发送方发送的数据。
确认号表示接收方期望下一个接收的字节的序号。
2.4数据偏移(Data Offset):
指定TCP头部的长度,以4个字节为单位。
取值范围为0~15,表示TCP头部长度为0 - 60字节。
2.5控制标志(Flags):
包括6个标志位,
分别为URG、ACK、PSH、RST、SYN和FIN,
用于控制TCP连接的建立、维护和关闭。
Flags | 含义 |
---|---|
URG(URGent) | 本数据段中包含紧急数据,紧急指针指明紧急数据的位置 |
ACK(ACKnowledgment) | 确认号有效,确认接收方已正确接收到发送方发送的数据 |
PSH(PuSH) | 表示数据应该立即被推送给应用程序,而不是在接收到更多数据后再推送 |
RST(ReSeT) | 表示连接重置,用于中断异常连接 |
SYN(SYNchronization) | 表示建立连接的请求,用于TCP三次握手。 |
FIN(FINish) | 表示关闭连接,用于TCP四次挥手 |
2.6窗口大小(Window Size):
表示接收方能够接收的数据量大小。
发送方根据窗口大小来决定发送的数据量。
2.7校验和(Checksum):
用于检测TCP头部和数据的正确性。
发送方在发送数据时计算校验和,并将其放在TCP头部中。
接收方在接收数据时同样计算校验和,
并将其与TCP头部中的校验和进行比较,以判断数据是否正确。
2.8紧急指针(Urgent Pointer):
用于标识TCP数据段中的紧急数据。
如果URG标志被设置,
那么紧急指针指定的字节表示紧急数据的最后一个字节的位置。
2.9选项(Options):
TCP头中还可以包含一些可选字段,
如时间戳、最大分段大小(MSS)等。
这些选项的使用是可选的,取决于具体实现。
2.10 填充(padding):
在IP头部中,如果选项字段的长度不是32位的整数倍,
则需要使用填充(padding)字段将其补齐。
填充字段是一些全为0的比特,以确保选项字段的长度是32位的整数倍。
3.IP头(IPV4)
每行32位,4字节
0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|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头中各字段的具体含义:
3.1版本(Version):
指定IP协议的版本号,
IPv4的版本号为4,
IPv6的版本号为6。
3.2首部长度(Header Length):
指定IP头部长度,以4个字节为单位。
取值范围为0~ 15,表示IP头部长度为0~60字节。
3.3区分服务(Differentiated Services,DS):
用于对IP数据包进行分类和区分处理,
以实现不同服务等级的提供。
3.4总长度(Total Length):
指定整个IP数据报(包括头部和数据)的长度,
以字节为单位。
3.5标识(Identification):
用于标识一个IP数据报的唯一性,由发送方生成。
3.6 标志位(Flags):用于标识IP数据报的一些属性。
- DF(Don't Fragment):
表示该数据报不允许被分片。
- MF(More Fragments):
表示该数据报是一个分片,并且还有其他分片未到达目的地。
3.7分段偏移(Fragment Offset):
用于标识分段数据包相对于原始IP数据包中的位置。
3.8生存时间(Time to Live,TTL):
指定IP数据包在网络中可以经过的最大跳数。
每经过一个路由器,TTL值会减1,
当TTL值为0时,数据包将被丢弃。
3.9协议(Protocol):
指定上层协议类型,如TCP、UDP、ICMP等。
3.10 头部校验和(Header Checksum):
用于检测IP头部的正确性。
发送方在发送数据时计算头部校验和,并将其放在IP头部中。
接收方在接收数据时同样计算头部校验和,
并将其与IP头部中的校验和进行比较,以判断数据是否正确。
3.11 源IP地址(Source Address)和目的IP地址(Destination Address):
用于标识发送方和接收方的IP地址。
在IP数据包经过网络传输时,每个路由器都会根据目的地址进行转发。
4.三次握手(3-way handsherk)和四次挥手 (4-way wavehand)
TCP/IP协议的三次握手和四次挥手,
即建立和关闭TCP连接,
可以确保数据传输的可靠性和完整性。
4.1三次握手
第一步(SYN):
synchronization /ˌsɪŋkrənaɪ'zeɪʃ(ə)n/
客户端发送一个SYN包给服务器端,
并且该包中包含了客户端初始化序列号的值。
此时,客户端处于SYN_SENT状态。
第二步(SYN-ACK):
服务器端收到SYN包后,返回一个SYN-ACK包,
该包中包含了服务器端初始化序列号的值和对客户端序列号的确认。
此时,服务器端处于SYN_RCVD状态。
第三步(ACK):
客户端收到SYN-ACK包后,发送一个ACK包作为对服务器端的确认。
此时,客户端处于ESTABLISHED状态,
而服务器端则从SYN_RCVD状态转变为ESTABLISHED状态。
4.2四次挥手
第一步(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状态。