TCP笔记

本文详细介绍了TCP协议的特点,包括面向连接性、可靠性和有序性、确认与重传机制、窗口机制、流量控制、连接管理、三次握手与四次挥手过程。重点讲解了TCP报文结构、选项字段和适用场景比较。
摘要由CSDN通过智能技术生成

TCP---传输控制协议\n是一种面向连接的可靠传输协议。\n\n特点:\n\nTCP是面向虚连接的传输层协议\n\n每一条TCP连接有且只能有两个端点,即每一条TCP连接只能是点对点的。\n\n可靠、有序、无丢失、不重复。\n\nTCP提供全双工通讯。\n\n发送缓存\n\n应用程序发送给发送方TCP准备发送的数据\n\nTCP已发送但是尚未收到确认的数据\n\n接收缓存\n\n按序到达但尚未被应用程序处理的数据\n\n乱序到达的数据\n\nTCP是面向字节流的。\n\n\u003Cspan style=\"background-color:#f8f8f8\">\u003Cspan style=\"color:#333333\">TCP连接的四元组:源IP、源端口、目IP、目端口。\n​\n套接字--->IP:port\u003C/span>\u003C/span>\nTCP报文段\n\u003Cspan style=\"background-color:#f8f8f8\">\u003Cspan style=\"color:#333333\">确认序列号:1、该确认序列号表示接收方期望收到发送方发送的下一个字节的序号。\n 2、代表接收方已收到该确认序列号之前的所有字节。\n  \n窗口值:指发送方可以不需要接收确认报文,就可以连续发送的数据最大量。\n​\n选项字段:MSS、时间戳、选择确认机制、窗口因子;\u003C/span>\u003C/span>\nTCP的确认机制被称为累积确认。\n\n\u003Cspan style=\"background-color:#f8f8f8\">\u003Cspan style=\"color:#333333\">确认位ACK:当ACK=1时,确认序列号字段有意义。在TCP连接建立后,所有传输的报文段都必须将ACK置为1。\n同步位SYN:代表连接请求\n终止位FIN:表明此报文段发送方数据已全部发送完毕,要求释放连接。\n​\n复位RST:表明TCP连接出现严重错误,必须释放连接,并重新建立新的传输连接。\n紧急位URG:当URG=1时,表明此报文中存在紧急处理的数据,是高优先级数据,应尽快交付应用程序处理。与紧急指针配合使用。\n推送位PSH:接收方应尽快交付接收应用进程,不再等待缓冲区填满在向上交付。\u003C/span>\u003C/span>\nTCP的可靠性机制\n排序机制\n\u003Cspan style=\"background-color:#f8f8f8\">\u003Cspan style=\"color:#333333\">MTU:最大传输单元--->包含数据部分、传输层头部、网络层头部--->以太网当中默认值为1500字节\nMSS:最大段长度----->仅包含数据部分\u003C/span>\u003C/span>\n在本地设备上,如果进行了分段操作,则无法进行分片操作。\n\n确认机制\n重传机制\n\u003Cspan style=\"background-color:#f8f8f8\">\u003Cspan style=\"color:#333333\">RTT:往返时间,指的是发送方将数据发出后,到他接收到对端反馈的确认报文的完整时间段。\nRTO:超时重传时间;略大于RTT时间。\u003C/span>\u003C/span>\nRTO时间是动态变化的时间。会进行超时间隔时间加倍。\n\n超时重传---快速重传机制。\n\n客户端通过服务端的反馈信息从而进行数据重传的方式被称为快速重传机制,此时的重传并非是因为RTO时间到达而触发,而是因为客户端连续接收到3个冗余ACK报文。---->快速重传机制会在RTO定时器超时之前重传报文段,从而解决超时重传时间加倍导致的延迟增大问题。\n\n为了加快重传效率,将累积确认机制修改为SACK机制(选择确认机制),在TCP首部中的选项内容中携带未收到的数据字段,从而引发客户端重传。\n\nTCP流量控制机制\n\u003Cspan style=\"background-color:#f8f8f8\">\u003Cspan style=\"color:#333333\">窗口:指发送方可以在不接收确认报文的前提下,一次性发送的数据最大量。\n​\n接收方会在连接建立之前创建一个接收缓存,用以存放发送方发送的数据。而窗口大小在最初等于接收缓存大小。之后,窗口大小等于缓存大小减去已存在缓存中的数据量(rwnd---接收窗口大小)。\n​\n发送方根据每一次接收到的确认报文中的窗口字段,及时调整发送缓存大小,确保发送缓存用于小于等于窗口值。\u003C/span>\u003C/span>\nTCP连接管理\nTCP连接的建立\n\u003Cspan style=\"background-color:#f8f8f8\">\u003Cspan style=\"color:#333333\">TCP建立连接的前置条件或需要解决的问题:\n1、每一端知晓对端的套接字\n2、进行参数协商(MSS、窗口值、是否使用选择确认机制、窗口扩大因子、时间戳)\n3、设备对资源进行分配\u003C/span>\u003C/span>\nTCP存在一个保活计时器,该计时器2小时时间。若该计时器时间内没有收到任何客户端的数据,服务端会发送一个探测报文段,并每隔75秒发送一次。若连续发送10个探测报文仍没有反应,则服务器认为客户端出现故障,关闭连接。\n\nTCP连接的释放\n\u003Cspan style=\"background-color:#f8f8f8\">\u003Cspan style=\"color:#333333\">1、是为了释放在之前分配给TCP进程的资源\n2、本地所有数据已传输完毕\u003C/span>\u003C/span>\n补充:TCP/UDP\n\nTCP是面向连接(有应有答)的协议,UDP是无连接的协议\nTCP协议的传输是可靠的,UDP协议的传输是“尽力而为”的\nTCP可以实现流控(滑动窗口机制),UDP不可以\nTCP可以实现分段操作,UDP不可以\nTCP传输速度较慢,消耗资源较大;UDP传输速度较快,消耗资源较少\nTCP和UDP适用场景:TCP适用于对速度要求不高但可靠性较高的场景;反之UDP(即时类通讯)\n\n补:面向连接:在传输数据先试用预备的协议(TCP协议)建立点到点的连接,之后进行数据传输。\n\nTCP的头部是可变长头部---最短20个字节(IP类似)\n\nTTL(time to live)---数据包每经历路由器一次转发,值就是减一,当一个数据包中的TTL值为0时,则路由器收到这样的数据包将直接丢弃,不再转发。\n\n校验和,目的:确保数据完整性;方法:反码相加法\n\nTCP的三次握手:\n\nTCP的四次挥手:A对B请求断开连接,A发送结束标记位FIN=1,B收到并回复确认包ACK=1,同时B对A发送结束标记位FIN=1,然后A回复确认包ACK=1。\n\n因为牵扯到数据传输的问题,四次挥手中的FIN结束包和ACK确认包不可合并,例:A发完十个数据包准备断开连接,但B要发一百个数据包并未发完,A可以断开和B的连接,但B不可以,因此两次挥手要分开。\n\n滑动窗口机制(实现流动控制的方法):发送数据包时涉及到窗口值win,A发给B三个数据包,假设为1,2,3(实质需要加上包内序号),此时窗口值win=3,B收到后若能接受则回复win=3,若不能则按自身情况回复窗口值。\n\nTCP传输可靠---确认,重传,排序,流控

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值