TCP里面的知识点

TCP协议段格式

16位源/16位目的端口号:(负责端与端之间的数据传输)表示数据是从哪个进程来,到哪个进程去
32位序号/确认序号:保证数据有序交付

16位窗口大小:(实现滑动窗口,以及流量控制)自己的接受缓冲区剩余空间的大小
16位校验和:保证数据一致性

16位紧急指针:标识哪部分数据是紧急数据

4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最小20字节最大长度是15*4=60
6位标志位:URG/ACK/PSH/RST/STN/FIN
40字节的选项数据:可有可无

SYN:链接建立的一个请求(请求建立连接)(同步报文端)
FIN:默认为0,如果为1表示为链接断开的请求(通知对方,本端要关闭了,结束报文端)
(以上俩个不可能同时)
ACK:确认号是否有效 报文
URG:紧急指针是否有效
PSH:告诉对方应用层尽快将接收缓冲区中的数据读走,好腾出剩余空间(提示接收端应用程序立即从TCP缓冲区把数据读走)
RST:服务端给客户端说,把你的链接重置一下(重新连一下)(对方要求重新建立连接)复位报文端

俩次握手:服务器觉得链接好了(其实没好),客户端(认为没好)所以导致会一直发送SYN。
防止网络阻塞。
三次握手:出现异常(报文丢失时),认为是客户端觉得链接好了

TCP保证可靠性的策略:
1) 面向链接(三次握手,四次挥手)
2)确认应答机制
3)保证数据根据序号按序到达
4)超时重传
5)(十六位窗口大小)流量控制,保证可靠性

3 .1 协议字段中的:(序号+确认序号(保证数据有序向应用层交付)
3 .2协议字段中的:校验和(校验验收的数据与发送的数据是否一致,不一致则发送重传请求,否则确认回复)

TIME_WAIT:1)保证链接成功释放
2)保证在双向上数据在网络中尽可能消散掉

TCP为了保证可靠传输,牺牲了部分性能,(有些性能的损失是没必要的,比如ack丢失导致的重传)
TCP又采用了几种机制来避免无谓的性能损失以及提高性能的方法
1 . 滑动窗口

滑动窗口:解决效率问题
–窗口大小:指的是无需等待确认应答而可以继续发送数据的最大值。其大小取决于阻塞窗口和接收端缓冲区反馈的窗口大小作比较,去较小的值为实际发送的窗口

  发送缓冲区

窗口里边的表示的是已发送但未收到应答的数据

快速重传机制:(既提高效率,又保证了可靠性):接受方收到了第二条数据,但是没有收到第一条,则初步认为第一条数据丢失,则立即发送第一条数据的重传请求,并且连续发送三次
当发送方连续收到三次重传请求的时候,就不需要等待超时,直接对这条数据进行重传连续三次,是因为要避免因为网络阻塞,数据延迟到达而导致的重传

拥塞控制 : 阻塞窗口下
:网络通信开始时,并不会直接发送窗口大小的数据,而是一种慢启动,快增长的形式进行数据传输,起到一个网络探测的作用,避免开始通信因为网络状况不好导致的发送数据越多,丢失数据越多的重传性能损失。
在增长的过程中,当出现丢包则初始化拥塞窗口大小,重新开始探测网络状况;
少量丢包,我们仅仅是出发超时重传;大量丢包,我们就认为是网络阻塞

流量控制

TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制叫做流量控制。

–接收端将自己可以接受的缓冲区大小放入TCP首部的“窗口大小”字段,通过ACK端通知发送端
–窗口大小字段越大,说明网络的吞吐量越高
–接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端
–发送端接收到这个窗口后,就会减慢自己的发送速度
–如果接收端缓冲区满了,就会将窗口置为0,这是发送方不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端

TCP小结
可靠性:
–校验和
–序列号(安序到达)
–确认应答
–超时重发
–连接管理
–流量控制
–拥塞控制
提高性能:
–滑动窗口
–快速重传
–延迟应答
–捎带应答

其他:
定时器(超时重传定时器,保活定时器,TIME_WAIT定时器等)

面向字节流
: 创建一个TCP的socket,同时在内核中创建一个发送缓冲区和一个接受缓冲区;

粘包问题
: tcp传输数据在发送缓冲区或者接受缓冲区中堆积,因为tcp数据收发的灵活性,导致有可能多条数据当作一条接受;(俩条数据的粘连)
:tcp本质的原因:tcp在传输层,对数据格式并不关心,对数据之间没有边界区分因此造成的数据粘包
:粘包是tcp在传输层对数据边界不敏感,因此需要用户在应用层进行数据边界管理:
特殊字符间隔 定长数据 不定长数据在应用协议头中声明数据长度

tcp连接管理中的保活机制
若是通信双方,长时间(7200s)没有数据往来,在会向发送保活探测数据包(要求对方对这个数据包进行回复),若是收到回复,则认为连接正常,若是间隔(75s)发送连续9次没有收到回复,则认为连接断开

tcp异常连接断开的情况:断电

你可能感兴趣的:(网络基础)