0714
概念部分
TCP连接的建立与终止
TCP端口
1~1023是标准端口组--------->特定的服务
1024~65535是临时端口组--------->操作系统临时分配
连接的建立过程
如笔记图
1.SYN=1 请求建立连接A--->B
2.ACK=1 响应1中的请求;SYN=1,请求连接B---->A
3.ACK=1 响应2中的连接请求
终止连接的过程
终止连接需要4次是由于TCP的半关闭造成的
最大报文段长度MSS(选项字段)(Maximum Segment Size)
概念:表示TCP传往另一端的最大数据块长度
当一个连接建立的时候,双方都要通告自己的MSS
对于一个以太网,MSS值可达1460字节
TCP的半关闭
TCP提供了连接的一端在结束它的发送后还能接收另一端数据的能力
应用程序shutdown:我已经完成了数据的传送,因此发送一个文件结束(FIN)给另一端,但我还想接受另一端发来的数据,直到他给我发来(FIN)。
客户端程序在close之前会等待2MSL的时间
原因:为了确认最后一个ACK已经被服务端收到
1.若在这2MSL的时间内又接收到了服务端发送的FIN,说明最后一个ACK丢失,那么客户端会在发送一个ACK
2.若在这2msl的时间内未收到FIN,说明服务器端已经关闭,则关闭客户端进程。
MSL(报文段最大生存时间)
表明报文段在被丢弃之前在网络中的最大时间,一般为30s,1min,2min。
复位报文段
基准的连接
目的IP地址和目的端口号以及源IP地址和端口号指明的连接
复位标志RST
复位的场景
1.当连接请求到达时,目的端口没有进程正在听。
2.异常终止一个连接,发送一个复位报文段而不是FIN来中途释放一个连接。
TCP的交互数据流
交互式输出
1.来自客户端的交互按键
2.来自服务器的按键确认;来自服务器的按键回显
3.来自客户端的按键回显
回显的序号是发送字节序号+len
作用
交互数据,例如telent,ssh,这种类型的协议在大多数情况下只做小流量的数据交换,比如按一下键盘,回显一个文字
两种策略
按照之前的步骤,发送一个字节的数据流量:41bit+41bit+40bit=162bit,在广域网中,这种流量会给通信造成很大的负担。
TCP采用两种策略对其进行改进。
1.捎带ACK
将第三步的ACK时延一段时间(最大为200ms),若在这段时间内客户又要发送数据给服务端,则将这个ACK与要发送的TCP整合为1个;若没有,则在200s后发送ACK到服务器。
2.Nagle算法
该算法要求TCP缓冲区中只有一个未被确认的未完成的小分组,再上一次数据的ACK到达之前,这个数据包会不断收集待发送的数据,ACK一旦收到,就将这个集合多个数据的数据包发出。
TCP成块数据流
ACK应答策略
发送端将会连续发送数据尽量填满接收方的缓冲区,而接收方只要发送一个ACK报文来回应就可以了。
滑动窗口
用于描述接收方TCP数据包缓冲区的大小
发送方根据这个数据来计算自己最多发送多长的数据
1.称窗口左边沿向有边沿靠近为窗口合拢,发生于数据被发送和确认时。
2.当窗口有边沿向右移动时,将允许发送更多的数据称为窗口张开,接收方进程读取已确认数据,并释放TCP缓存时。
3.当右边沿向左移动时,称之为窗口紧缩。但是不常用。
PUSH标志
发送方使用该标志通知接收方将接收的数据全部提交给接收进程。
客户程序在其TCP设置PUSH标志,客户进程通知TCP在向服务器发送一个报文段时,不要因为等待额外数据而使已提交的数据在缓存中滞留。
当服务器的TCP接收到一个设置了PUSH标志的报文段时,他需要立即将这些数据递交给服务器进程而不等待判断是否有额外的数据到达。
慢启动
在观察到新分组进入网络的速率与另一端返回确认速率相同想相同之后才会进行工作
拥塞窗口
刚建立TCP连接时,拥塞窗口被初始化为1个报文段,每收到一个ACK,拥塞窗口就增加一个报文段,这样,再发送2个报文段,接收到两个ACK,拥塞窗口就会变成4,以此类推,拥塞窗口变为指数增长直到出现超时错误
发送端了解了双方线路的承载能力,也就确定了拥塞窗口的大小。