TCP

一、TCP链接

1、TCP被称为面向连接的,这是因为两个应用在发送数据之前,必须要先相互“握手”,即双发初始化与TCP连接相关的许多TCP状态变量。这种TCP连接仅保留在两个通信端系统的TCP程序中,中间的网络层(路由器和链路层交换机)不会维持TCP连接状态,他们只看到了数据报
2、TCP连接是点对点的,不存在1对多,或者多对多
3、通过三次握手建立连接后,客户进程通过socket传递数据流,TCP接受数据并将数据放到该连接的发送缓存里(发送缓存是三次握手期间设置的)接下来TCP会不时地从发送缓存中取出一块数据,并将数据传递到网络层。TCP可从缓存中去取出并放到报文段中的数据数量受限于最大报文段长度(Maximum Segment Size)MSS,MSS指在报文段李应用层数据的最大长度,不包括首部的TCP报文段最大长度
4、TCP为应用层数据配上一个TCP首部,形成多个TCP报文段,这些报文段下发到网络层,网络层将其分别封装到网络层IP数据报中,将IP数据报发送到网络中,TCP的接收端 接受到一个报文段后,该报文段的数据就放到TCP连接的接受缓存中,应用层从缓存中去读数据流


image.png

二、TCP报文段结构

image.png

1、源端口号和目的端口号用于多路复用/分解来自活送到上层应用的数据,同UDP一样,TCP首部也有校验和字段
2、序号:TCP为每个字节编号,如果一个文件有500000字节,MSS为1000字节,数据流的首字节编号为0,第二个报文段分配序号1000,第三个2000,每个序号填到相应TCP报文段首部的序号字段中
3、确认号:TCP是双全工的,主机A向主机B放数据时也可接收主机B的数据,主机A中的确认号是主机A期望从主机B接收到的报文段的序号
4、接受窗口:用于流量控制,指示接收方愿意接受的字节数量
5、首部长度:定义了TCP首部长度
6、选项字段:用于发送方与接收方鞋厂最大报文段长度(MSS)或者在高速网络环境下用作窗口调节因子时使用通常该字段为空
7、标志字段:ACK用于指示确认字段中的值时有效的

3、TCP可靠数据传输概述

1、确认合理的超时时间:大于RTT
1)RTT是变化的,测试多个从段发出到收到ACK的时间,取平均值得到 EstimatedRTT
2)安全边界:如果estimatedRTT变化大,安全边界值设置较大,如果变化不大,值设置小
3)超时时间 = EstimatedRTT + 安全边界
2、发送方做的事件
1)从应用层收到数据,创建报文段,序列号是segment的第一个字节编号;开启计时器;设置超时时间
2)超时:仅仅重传引起超时的segment,然后重启计时器
3)收到ACK:如果确认此前未收到的segment,更新滑动窗口,如果窗口中还有未被确认的分租,重启计时器
3、快速重传机制
根据流水线机制,发送方会发送多个分组,如果某个分组丢失,会引起接收方发送多个重复的ACK,告知发送方要发送丢失的分组
如果发送方收到同一个数据的3个ACK,则假定该数据之后的 段已经丢失了,在定时器超时钱即进行重传

四、流量控制

1、思想:接收方的应用层读取缓存的数据 比 发送方发送速度慢,会导致接受方的TCP链接缓存溢出,数据丢失,所以要控制发送速度
2、实现:receiver通过segment首部接收窗口字段将空闲的缓存空间告诉sender,sender限制已经发送但还未收到ACK的数据不超过receiver空闲的缓存空间


image.png

五、TCP连接管理

1、在数据传输前建立连接 “三次握手”
目的:初始化TCP变量,创建缓存和流量控制信息(接收窗口)
过程:1)客户端发送请求:发送一个特殊的报文段,,不包含数据,首部的标志位SYN = 1,因此该报文段叫SYN报文段,随机一个初始编号client_isn,将编号放到SYN报文段首部的序号中
2)服务器接收请求;1、分配TCP连接缓存和变量,并发送允许连接的确认报文段, 该报文段也不包含数据, 首部的SYN = 1,初始化一个服务器序号serve_isn,首部的确认号字段=client_isn+1(MSS为单位),该允许连接的报文叫SYNACK报文段
3)客户端确认允许连接: 收到SYNACK报文段后,客户端给TCP连接分配缓存和变量, 给服务器发送确认报文段;发,序号 = 接收方SYN报文段的确认号client_isn + 1,确认号 = serve_isn + 1


image.png

2、断开连接4次握手


image.png

3、客户端的生命周期
image.png

4、服务器的生命周期
image.png

六、拥塞控制

1、定义:太多发送主机发送了太多数据或者发送速度太快,以至于网络无法处理
2、表现:分组丢失(路由器缓存溢出)
分组延迟过大(在路由器缓存中排队)
3、代价:分租丢失需要重传,重启计时器,造成资源浪费,并且该分组上游传输能力全部浪费掉,白传输了
控制方法
4、控制方法
1)、端对端拥塞控制
网络层不需要显式的提供支持,端系统通过观察loss,delay等
网络行为判断是否发生拥塞,TCP采取这种方法
2)网络辅助的拥塞控制
路由器向发送方显式地反馈网络拥塞信息,简单的拥塞指示(1bit):SNA,DECbit, TCP/IP ECN, ATM),指示发送方应该采取何种速率

六、拥塞控制的基本原理

1、如何感知网络拥塞
timeout或者3个重复ACK, 发生拥塞后,客户端降低速率
2、如何合理地调整发送速率
1)加性增,乘性减:逐渐的增加发送速率,谨慎探测可用带宽,发送loss后,将速率减半
2)慢启动:SS:初始速率很慢,指数性增长,
threshold变量 = 发送堵塞时,堵塞窗口值得1/2
3个重复ACK:拥塞窗口减少到一半,然后线性增长
timeout:拥塞窗口直接设置为1,然后指数增长,达到threshold后再线性增长指示发送方应该采取何种速率
指示发送方应该采取何种速率RTTRTT

你可能感兴趣的:(TCP)