网络通信之TCP协议

TCP是一个巨复杂的协议,在网络通信中他需要解决很多问题,所以这里是带着大家来了解TCP协议的魅力,关于协议的细节,推荐去看W.Richard Stevens的《TCP/IP 详解 卷1:协议》。

一. tcp概念

TCP四元组:[源ip,源端口号,目的ip,目的端口号]


TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

三个概念:

面向连接:必须在建立连接前确认对方链路可达并准备好才开始通信,建立后对状态的保持。(udp直接通信,不会询问接收端是否可达并准备接收数据)

字节流:tcp传输的是byte类型数据。

可靠:保证数据报能够到达接收端(超时重传机制、丢包重传及数据顺序一致)(真的一定可靠吗?)

 

二. tcp如何建立连接

2.1 两军问题

本质:在不可靠的通信链路上试图通过通信达成一致。


问题描述:一支白军被围困在一个山谷中,山谷的两侧是蓝军。困在山谷中的白军人数多余山谷两侧的任意一支蓝军,而少于两支蓝军的中和。若一支蓝军对白军单独发起进攻,则必败无疑;但若两支蓝军同时发起进攻,则可取胜。两只蓝军希望同时发起进攻,这样他们就要传递消息,以便确定发起进攻的具体时间。假设他们只能派遣士兵穿越白军所在的山谷(唯一的通信信道)来传递消息,那么在穿越山谷是,士兵有可能被俘虏,从而造成消息的丢失。现在的问题是:如何通信,以便蓝军必胜。

通信策略:


最后发出消息的一方永远不知道对方是否收到这个消息,因此不存在使蓝队必胜的通信协议。

结论在不可靠的通信中,不管几次握手都是有风险的。因为永远无法确定最后一次通信送达。通信次数大于3后并不能提升通信的可靠性。这是tcp采用三次握手的原因。

2.2 tcp的报文格式


tcp标志位

ACK:确认标志位,确认可以发送数据,建立连接后act为1。

SYN:建立连接标志位,在连接建立时用来同步序号,syn为1表示这是一个连接请求或连接接收报文。

FIN:结束一个连接的标志位,FIN=1表示释放连接。

URG:当URG=1时,表示报文段中有紧急数据,应尽快传送。

 PSH:当发送端PSH=1时,接收端尽快的交付给应用进程。

 RST:当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接。

其他数据

序   号seq:tcp建立连接是会随机生成一个序号,建立连接后tcp进行通信全部是基于这个序号(也是tcp传输数据顺序一致的保证)。

确认号ack:接受端确认收到数据对seq加一。

窗口:用来控制对方发送的数据量,通知发放已确定的发送窗口上限。

2.3 tcp三次握手


三次握手的过程:

客户端主动打开连接,发送ACT=0,SYN=1表示请求建立连接,产生随机数x为序号seq,给服务器发起第一次握手;

服务器接收到客户端的请求后,发送SYN=1,ACK=1表示连接到接收报文,确认号act=x+1表示知道了客户端的seq,同时产生服务器的随机数y作为序号seq,发送给客户端,即为第二次握手;

最后客户端设置AC=1表示建立请求,设置act=y+1,seq=x+1表示发送的确认消息。即为第三次握手。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值