tcp头、三次握手、四次挥手

1. tcp头
在这里插入图片描述
1 源端口和目的端口:找到目标进程,实现分用;
2 序号(seq):tcp传送的字节流,每个都按顺序编号,首部中的seq是本报文段中首个字节的序号
3 确认号(ack):两个作用,确认收到报文段和下一次希望收到对方报文段首字节编号;
4 控制位: ① URG = 1,告诉系统此报文有紧急数据,尽快传送
② ACK = 1,确认号才有效,tcp规定:建立连接后发送的报文段ACK都置1
③ PSH = 1,应尽快向上交付给进程,不等缓存填满
④ RST = 1,tcp连接严重错误,必须断开重连
⑤ SYN = 1,表示这是一个连接请求或连接接受报文
⑥ FIN = 1,表名发出此报文段方已发送完毕,请求释放
5 窗口:明确指出现在允许对方发出的数据量,一直在更新

2. Tcp建立连接之三次握手
在这里插入图片描述
1 首先,服务器被动打开后在一个监听状态,这时一个客户端打开并向服务器发送一个连接请求报文段:SYN = 1,seq = x;SYN = 1的报文段不携带数据,但规定要消耗一个序列号;之后进入SYN-SENT状态;
2 服务器收到请求,若同意则回发一个连接确认:SYN = 1,seq = y,ack = x+1,ACK = 1;之后进入SYN-RECVD状态;
3 客户端收到确认,再给服务器确认:seq = x+1,ack = y+1,ACK = 1;这时连接建立,客户端进入ESTABLISHED状态;
4 服务器收到确认,也进入ESTABLISHED状态;
客户端最后一次确认的原因:防止超时重传的连接请求报文段又突然被服务器收到;若没有最后一次确认,服务器又进入连接状态等待数据,但客户端并不知道,白白浪费资源;

3. Tcp连接释放之四次挥手
在这里插入图片描述
1 客户端发送完数据后,向服务器发送释放请求:FIN = 1,seq = u;tcp规定FIN= 1的报文段即使不携带数据,也要消耗一个序列号;之后进入FIN-WAIT-1状态;
2 服务器收到后确认:seq = v,ack = u + 1,ACK = 1;之后进入CLOSE-WAIT状态,这时服务器会通知上层进程,看是否还有后续工作,可能还会向客户端发一些数据;
3 客户端收到确认进入FIN-WAIT状态,但还会接收数据;
4 服务器等进程处理完毕发送释放连接确认:FIN= 1,seq = w,ack =u+1,ACK= 1;进入LAST-ACK状态;等客户端确认;
5 客户端收到后发送确认:seq = u+1,ack = w+1,ACK = 1;进入TIME-WAIT状态等待2MSL后关闭;2MSL为最长报文段寿命;
6 服务器收到确认结束;
等待2MSL时间的原因:
①确保服务器收到了确认报文段并结束:若服务器没收到确认,会在2MSL时间内超时重传,客户端会再发确认,重新设置2MSL;
②防止已失效连接请求报文段,等待2MSL可以让本连接产生的所有报文段失效,下一次连接就不会出现;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值