建立连接(三次握手):
第一次:客户向服务器发送连接请求段 , 建立连接请求控制段(SYN=1) , 表示传输的报文段的第一个数据字节的序列号是x , 此序列号代表整个报文段的序号(seq=x);客户端进入 SYN_SEND (同步发送状态);
第二次:服务器发回确认报文段 , 同意建立新连接的确认段(SYN=1) , 确认序号字段有效(ACK=1) , 服务器告诉客户端报文段序号是y(seq=y) , 表示服务器已经收到客户端序号为x的报文段 , 准备接受客户端序列号为x+1的报文段(ack_seq=x+1);服务器由LISTEN进入SYN_RCVD (同步收到状态);
第三次:客户对服务器的同一连接进行确认.确认序号字段有效(ACK=1),客户此次的报文段的序列号是x+1(seq=x+1),客户期望接受服务器序列号为y+1的报文段(ack_seq=y+1);当客户发送ack时 , 客户端进入ESTABLISHED 状态;当服务收到客户发送的ack后 , 也进入ESTABLISHED状态;第三次握手可携带数据;
文章插图
5.6 TCP连接的四次挥手(重要)
释放连接(四次挥手)
第一次:客户向服务器发送释放连接报文段 , 发送端数据发送完毕 , 请求释放连接(FIN=1) , 传输的第一个数据字节的序号是x(seq=x);客户端状态由ESTABLISHED进入FIN_WAIT_1(终止等待1状态);
第二次:服务器向客户发送确认段 , 确认字号段有效(ACK=1) , 服务器传输的数据序号是y(seq=y) , 服务器期望接收客户数据序号为x+1(ack_seq=x+1);服务器状态由ESTABLISHED进入CLOSE_WAIT(关闭等待);客户端收到ACK段后 , 由FIN_WAIT_1进入FIN_WAIT_2;
第三次:服务器向客户发送释放连接报文段 , 请求释放连接(FIN=1) , 确认字号段有效(ACK=1) , 表示服务器期望接收客户数据序号为x+1(ack_seq=x+1);表示自己传输的第一个字节序号是y+1(seq=y+1);服务器状态由CLOSE_WAIT 进入 LAST_ACK (最后确认状态);
第四次:客户向服务器发送确认段 , 确认字号段有效(ACK=1) , 表示客户传输的数据序号是x+1(seq=x+1) , 表示客户期望接收服务器数据序号为y+1+1(ack_seq=y+1+1);客户端状态由FIN_WAIT_2进入TIME_WAIT , 等待2MSL时间 , 进入CLOSED状态;服务器在收到最后一次ACK后 , 由LAST_ACK进入CLOSED;
文章插图
文章插图
为什么需要等待2MSL?
- 最后一个报文没有确认;
- 确保发送方的ACK可以到达接收方;
- 2MSL时间内没有收到 , 则接收方会重发;
- 确保当前连接的所有报文都已经过期 。
为操作系统或网络应用程序提供访问网络服务的接口 。应用层重点:
- 数据传输基本单位为报文;
- 包含的主要协议:FTP(文件传送协议)、Telnet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议) , POP3协议(邮局协议) , HTTP协议(Hyper Text Transfer Protocol) 。
DNS(Domain Name System:域名系统)【C/S , UDP , 端口53】:解决IP地址复杂难以记忆的问题,存储并完成自己所管辖范围内主机的 域名 到 IP 地址的映射 。
域名解析的顺序: