TCP/IP互联网协议
一、TCP协议
概述
TCP全名是(Transmission Control Protocol 传输层控制协议),是一个可以提供可靠的、支持全双工、连接导向的协议,因此在客户端和服务端之间传输数据的时候,是必须先建立一个连接的。
TCP的特点
连接:
- 是虚拟抽象的概念
- 能让两个通信的程序间确保彼此都在线
- 加快响应请求速度
- 连接也被称之为会话(session)
- 使得通信更稳定更安全
- 消耗更多资源
总结:连接不是一个物理概念,而是通过传输双方的约定加上程序手段去形成的一个抽象的概念,连接会让传输的双方更加的资源倾斜,从而保证连接的通畅,连接让双方的传输更加稳定安全,但是连接消耗更多的资源,比如说每一个请求都要有响应。还有一部分是不适用于连接导向这种协议的,比如说视频播放,通常视频播放不在TCP/IP协议上
全双工:
- 单工:任何时刻数据只能单向发送
- 半双工:允许数据在两个方向上传输,在某一时刻,只能存在一个方向数据,只允许数据在一个方向上传输,其实一条线路就可以实现半双工。线路多只是增加传输速度
- 全双工:任何时刻都能双向发送数据,至少需要两条线路
可靠性:是指数据保证无损传输
- 数据在网络间传输是无序的,采用的封包交换的技术,接收方有一种算法将无序的数据恢复原有的状态
- 如果发送方同时要把消息发送给多个接受方,这种情况称之为多播,在这种情况下对数据的可靠性要求每个接收方都无损的收到副本。需要分布式环境。多播有一种情况是强可靠性,强可靠性就是只要一个消息传输到了任何一个接收者,那就所有的接收者都要接收到这个消息,要么所有接收者都拒收这个消息,分布式的一致性,只不过没有分布式的一致性要求那么高,只是传输的无损
TCP协议的工作过程:
-
建立连接的过程(三次握手) -
断开连接的过程(四次挥手) 比建立连接多一次的原因是服务端发送ACK和FIN时是不能一起打包的 -
传输数据 3.1. 报文拆分:拿到应用层数据,进行拆分,拆分成多个数据块,称之为TCP段,根据封包交换在网络中存在一定的并行线路,拆分之后就可以复用这些线路进行传输。数据也不要拆得太小,拆分数据是挺消耗CPU资源的,需要CPU频繁的内存操作。TCP也只是对数据进行一个初步的拆分,还有更细粒度的拆分会交给网卡,网卡是硬件设备,不消耗内存 3.1.1 传输数据-顺序保证 问题:tcp段是非常多的,不能一次把所有的排序都能完成,只能局限在某一个部分进行排序 解决方案:时间窗口排序,只排序这这一个时间段内的数据,如果排序时发现数据不完整,会直接抛弃这个时间窗口,要求发送方重发 3.1.2 TCP序号:发送序号(Seq)、接受序号(Ack),一个端的发送序号是另一个端的接收序号 3.2. 增加TCP头 TCP头:TCP报文段 = TCP头部 + TCP段数据
- 源端口:描述发送方机器上的应用
- 目标端口:描述接收方服务器上的应用
- 发送序号(Seq)/接受序号(Ack):32位字节,最大到40亿,就能支持很长时间的传输
3.3. 数据重组 未完待续
|