TCP协议详解

OSI七层参考模型
最底层开始
物理层:定义电气电压接口规范光学特性
数据链路层:1、MAC:媒介访问控制层
2、LLC:逻辑链路层:为上层提供fcs校验
网络层:通过ip地址进行逻辑寻址(路由器)
传输层:数据分段,通过端口号区分不同的程序
传输层
TCP:面向连接的可靠传输协议 (看懂)
面向连接体现在三次握手,可靠性体现在确认、重传,排序,流控(滑动窗口)
UDP:非面向连接的不可靠传输协议

TCP报头

——源目端口各占两个字节,分别写入源端口和目标端口
——序列号:32比特,记录发送次数,字节流的序号,例如一段报文的序号为301,携带100个字段,那么下一个报文的序号就是401
——确认号ACK:4个字节,表示希望接受到的下一个报文的第一个字节的序列号,表示自己确认收到上一个包
——首部长度:数据偏移,表示报头离报文内容的距离
——保留:为QOS做预留,用于确认包的优先级
——小字节
1、URG=1表示报文中有紧急数据;
2、ACK=1时确认号才有效,建立连接之后所有报文的传输都应该把ACK置1;
3、PSH=1时表示这一端的进程希望在键入命令之后立刻得到响应(提高优先级)
4、复位RST=1时表示TCP连接中出现错误,必须重新建立连接
5、同步SYN,在连接建立时用来同步序列号。当SYN=1,ack=0时表示这是连接建立请求报文,若同意连接则响应报文中SYN=1,ack=1。
6、终止FIN=1时,表示发送端的报文已发完,并请求断开连接
——滑动窗口:占两字节,通知接收方本报文需要多大的窗口来接收
——校验和:占两个字节,检验首部和数据
——指针:占两个字节,指出本报文段中优先数据的位置(字节数)
——选项:长度可变,定义其他可选参数(加密)

TCP三次握手
第一次握手:客户发送syn包到服务器并进入SYN-SENT状态,等待服务器确认;SYN同步序列编号
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1)同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN-RECV状态
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

TMIE-WAIT状态:
1、可靠终止TCP连接:如果因为网络原因最后一个ACK报文被丢弃,此时服务器因为没有收到ACK而超时重传FIN报文,处于TIME-WAIT状态的客户端可以继续对FIN报文做回复,向服务器发送ACK报文
2、保证让迟来的TCP报文段有足够的时间被识别和丢弃。连接结束时网络中的延迟报文也应该被丢弃,以免影响立刻建立的新连接

三次握手为社么是三次
握手两次:
1、如果客户端发给服务端的SYN报文因为网络原因延迟发送,由于客户端没有收到服务端对SYN的确认报文,会重发SYN报文,服务器会回复ACK,连接建立,数据发送完毕,这条连接被正常关闭。这时延迟的SYN报文才到服务端,服务端误以为是客户端重新发送的同步报文,又回复一个ACK报文,又和客户端建立了连接
2、如果服务端给客户端发送的ACK报文因为网络原因,报文被丢弃,此时服务端认为已经建立了连接,但是客户端没有收到确认报文,认为还未建立好连接,客户端就会重发SYN报文,此时服务端却已经处于就绪状态
握手四次:
第一次客户端给服务端发送SYN同步报文;第二次服务端收到SYN之后给客户端回复ACK确认报文;第三次服务端给客户端发送SYN同步报文;第四次客户端给服务端发送ACK确认报文--------第二次和第三次之间,服务端和客户端没有任何数据交互,分开发送相当于多发了一次TCP报文,SYN和ACK标识只是TCP报头的一个标志位,这两步完全可以合并,从而提高连接速度和效率

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值