1.1 TCP/IP分层
分层 | 功能 | 协议 |
---|---|---|
链路层 | 包括操作系统中的设备驱动程序和网络接口卡。负责处理与电缆的物理接口细节 | ARP(地址解析协议) RARP(逆地址解析协议) |
网络层 | 处理分组在网络中的活动,如:分组的选路 | IP协议(网际协议) ICMP(互联网控制报文协议) IGMP(互联网组管理协议) |
运输层 | 为两台主机的应用程序提供端到端的通信 | TCP(传输控制协议) UDP(用户数据报协议) |
应用层 | 负责处理特定的应用程序细节 | Telnet(远程登录) FTP(文件传输协议) SNMP(简单网络管理协议) SMTP(简单邮件传送协议) |
补充:
- ICMP:是IP协议的附属协议。用于与其他主机或路由器交换错误报文和其他重要信息。应用程序也有可能访问它。诊断工具Ping和Traceroute都使用了ICMP。
- IGMP:是IP协议的附属协议。用于把一个UDP数据报多播到多个主机
- ARP: IP地址——>硬件地址
- RARP: 硬件地址——>IP地址
- 网络层 ifconfig命令:查询和配置网络接口
netstat命令:打印每个网络接口的分组传输信息
1.2 API socket
使用TCP/IP协议的应用程序通常采用两种应用编程接口(API): socket和TLI (运输层接口:Transport Layer Interface)。
1.3 TCP三次握手与四次挥手
TCP的标志位
- SYN :同步标志位,用于建立会话连接,同步序列号;
- ACK : 确认标志位,对已接收的数据包进行确认;
- FIN : 完成标志位,表示我方已经没有数据要发送了,即将关闭连接。
TCP建立连接(三次握手)
- 客户端发送一个SYN包(Seq=x),发送完后进入SYN_SEND状态;
- 服务器返回ACK应答(ACK=x+1),同时发送一个SYN包(Seq=y),然后进入SYN_RCVD状态;
- 客户端发送ACK确认包(ACK=y+1),然后进入ESTABLISHED状态;服务器接收到这个包,也进入ESTABLISHED状态。
TCP关闭连接(四次挥手)
- 客户端发送一个FIN包(Seq=x),告诉服务器需要关闭连接,表示自己不用发数据了,但还可以接收数据,然后进入FIN_WAIT_1状态;
- 服务器发送一个ACK包(ACK=x+1),然后进入CLOSE_WAIT状态;客户端收到包后,进入FIN_WAIT_2状态;
- 服务器发送一个FIN包(Seq=y),进入LAST_ACK状态;
- 客户端发送一个ACK包(ACK=y+1),进入TIME_WAIT状态,等待服务器可能请求重传ACK包。 服务器接收到ACK包,关闭连接,进入CLOSED状态。 客户端等待固定时间后,没有收到服务器的请求包,认为服务器已关闭连接,自己也关闭连接,进入CLOSED状态。
Q:为什么建立连接是三次握手,关闭连接却是四次握手?
A : 建立连接时服务器端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。
关闭连接时服务器端收到客户端的FIN报文时,先返回ACK报文,表示自己知道客户端没有数据要发送了;等到服务器端数据发送完毕后,再发送FIN报文告诉客户端。