博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
0714
阅读量:5158 次
发布时间:2019-06-13

本文共 1788 字,大约阅读时间需要 5 分钟。

概念部分

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,以此类推,拥塞窗口变为指数增长直到出现超时错误

发送端了解了双方线路的承载能力,也就确定了拥塞窗口的大小。

 

转载于:https://www.cnblogs.com/sslblog/p/5671488.html

你可能感兴趣的文章
初步了解HTTP
查看>>
unittest----assert断言的使用
查看>>
caffe+opencv3.3.1
查看>>
利用正则按固定长度分割字符串
查看>>
NGUI里的sprite和label有白色的边框
查看>>
python——进程基础
查看>>
CentOs6.6安装Python3
查看>>
PHP框架自动加载类文件原理
查看>>
深度链接对社会化营销有哪些价值和作用?
查看>>
【php数组函数序列】之sort() - 对数组的元素值进行升序排序
查看>>
文件锁
查看>>
使用mybatis插入数据(insert)时返回主键的问题
查看>>
[LinqPad妙用]-在Net MVC中反射调用LinqPad中的Dump函数
查看>>
ASP.NET前台代码绑定后台变量方法总结
查看>>
iOS开发富文本
查看>>
C++中的临时对象
查看>>
01_Android应用开发环境_01_android发展史及系统架构
查看>>
WCF元数据发布的2种方式:httpGetEnabled与mex
查看>>
值类型与引用类型传递的艺术
查看>>
jmeter 通过ant集成到jenkins
查看>>