网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗

网络七层协议

 

 

物理层(网卡)
作用:定义物理设备标准(网线类型、光纤接口类型、各种介质的传输速率等),用于计算机之间的数据传输
传输数据:比特流(0101,bit单位比特,数模转换和模数转换)

数据链路层(交换机)
定义了如何格式化数据以进行传输,和控制对物质的访问,该层将比特数据组成帧。(交换机)
它提供错误检测和纠正
传输数据:帧
网络层(路由器)
作用,将网路地址翻译对应的物理地址;两个节点的路径发送(发送路径-接受路径) 路由器:单位是数据包。IP协议
传输数据:数据包
协议:IP协议

传输层(最重要的一层)
作用:为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节
使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路
传输数据:当数据达到最大限度、将数据分割成信息段
协议:TCP、UDP

会话层
建立和管理不同设备之间的通信
表示层
解决不同系统的通信语法的问题
应用层
规定消息头,方便接收方正确解析发送方发送的信息;为计算机用户提供应用接口,也为用户直接提供各种网络服务
协议:HTTP

 

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第1张图片

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第2张图片

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第3张图片

 

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第4张图片

 

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第5张图片

 

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第6张图片

 

传输控制协议tcp简介
1  面向连接的、可靠的、基于字节流的传输层通信协议
2  将应用层的数据流分割成报文段并发送给目标节点的tcp层
3  数据包都有序号,对方收到则发送ACK确认,未收到则重传
4  使用校验和来检验数据在传输过程中是否有误

 

 

flags
urg:紧急指针标志,1 有效,0 忽略。
ack:确认序号标志,1 表示确认号有效,0表示报文中不含确认信息。忽略确认号字段。
psh:push标志,1表示带有push标志的数据,指示接收方在接受到该报文段应尽快将报文段交给应用程序,而不是在缓冲区进行排队。
rst:重置连接标志,用于重置连接,或拒绝连接请求(用于处理连接中断)
syn:同步序号,用于建立连接过程 syn = 1 ack = 0 表示该数据段没有使用稍待的域,则连接应答稍待一个确认则syn=1 ack = 1
fin:finish标志,用于释放连接 1 表示发送方已经没有数据发送了 即关闭本方数据流。

 

source port (源端口)  destination(目标端口)
Sequence Number(同步序号)
Acknowledgement Number(确认序号)
Offset(偏移量)  Reserved(保留域)TCP Flags(标志位) Window(滑动窗口)
CheckSum(检验和)            Urgent Pointer(紧急指针)
TCP Options(定义一些可选参数)

source port : 表示源端口 占 2B 16位 65535 1B = 8 bit
destination port:目的端口 占 2B 16位 65535 1B = 8 bit
TCP 与 UDP 都不包含ip信息,因为那是ip层上的事情。但都会包含源端口和目的端口,端口号最大到65535,端口是传输层支持范围的。
两个进程在计算机中进行通讯可以由管道、内存共享、信号量、消息队列等方法,进行通讯,而两个进程要进行通信的前提是要能唯一的标识进程,通过这个唯一的标识找到这个进程。

window窗口:指的是滑动窗口的大小,用来告知接收端与发送端的缓存大小,以此控制发送端发送数据的速率从而达到流量控制。

check sum : 检验和,指的是奇偶校验,此校验和是对整个pct报文段,包括tcp头部,和tcp数据,以16位进行计算所得,由发送端计算和存储并由接收端进行验证。

urgent pointer:紧急指针,只有tcp flags 中的 urg = 1时才有效。指出本报文段段中的紧急字节数。

TCP option :可选项其长度可变,定义一些其他的可选参数。

 

各个状态的意义如下:

LISTEN - 侦听来自远方TCP端口的连接请求;

SYN-SENT -在发送连接请求后等待匹配的连接请求;

SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;

ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;

tcp的三次握手


1  SYN=1,seq=x(任意正整数)服务端由listen状态转为syn-rcve
2  SYN=1,ACK=1,seq=y,ack=x+1客户端由syn-sent-》estab
3  ACK=1,seq=x+1,ack=y+1服务端由syn-rcvd-》estab
数据开始传送

 

 

 

三次握手流程:
    客户端发送SYN报文段请求连接报文(SYN=1,seq=x),不能携带数据;
    服务器向客户端发送SYN+ACK报文段报文(SYN=1,ACK=1 ,seq =y,ack=x+1);
    客户端向服务器发送ACK报文段(ACK=1,seq=x+1,ack=y+1)

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第7张图片

 


 

 

 

acknowledge number:占 4B,期望收到对方下一个报文的第一个数据字节的序号,例: B 收到了 A发送过来的报文,其序列号字段为301而数据长度是200字节,这表明B正确的收到了到序号301+200-1=500为止的数据,因此B期望收到A的下一个数据序号是501所以B在发送给A的确认报文中会把ack确认号置为501。

sequence number :  占用 4B,tcp的字节流中每个字节都是按顺序去编号的,例如一个报文的序号字段值为107而携带的数据共有100个B(字段),如果有下一个报文段就应该由107+100从207开始。

 

为什么需要三次握手才能建立起连接
为了初始化sequence Number 的初始值
通讯的双方要互相告知对方自己的初始的sequence number 
这个number 以后要作为数据通讯的序号,以保证这个进程接收的数据不会因为网络上的传输问题出现乱序。tcp会用这个序号来拼接数据避免乱序。因此在服务器回发sequence number 即第二次握手之后呢,还需要发送确认报文给服务器告知服务器说客户端已经收到你的sequence number了。

 

第一次握手,客户端会发送一个syn(syn=j)包到服务器,并进入syn_send状态,等待服务确认
第二次握手,服务器收到syn包,然后确认收到客户的syn(ack=j+1),同时自己再记录一个syn=k,然后发送一个syn+ack包,服务器进入syn_recv状态
第三次握手,则是客户端收到syn+ack的包,并想服务器发送确认宝ack(ack=k+1),发送完毕后,客户端和服务器进入established状态,完成三次握手。
应该就是   客户端发送到服务器一个值,然后服务器回应值+1后,再发送自己的一个值,客户端收到后将服务器的值+1来确保几次通讯那都已经畅通,从而完成连接

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第8张图片网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第9张图片

 

三次握手:
为了初始化sequence number的初始值
首次握手的隐患--SYN超时
起因:
       server收到client的SYN,回复SYN-ACK的时候未收到ACK确认;
       server不断重试直至超时,linux默认等待63秒才断开连接;
会被恶意程序耗尽连接队列,让正常程序无法访问。
防护措施:
       SYN队列满后,通过tcp_syncookies参数会发SYN Cookie;
       若为正常连接则Client会回发SYN Cookie,直接建立连接;
保活机制
      向对方发送保活探测报文,如未收到响应则继续发送
      尝试次数达到保活探测数仍未收到响应则中断连接

 

第四次握手

 

tcp采用四次挥手来释放连接

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进去FIN_WAIT_1状态

第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1,Server进入CLOSE_WAIT状态

第三次挥手:Server发送一个FIN用来关闭Server到Client的数据传送,Server进入LAST_ACK状态

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,

完成四次挥手

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第10张图片

 

为什么需要四次挥手才能断开连接呢

全双工(允许数据在两个方向上,同时传输。即服务器和客户端可以同时互相发送数据)

因为TCP是全双工的,所以发送方和接收方都需要FIN报文和ACK报文。

即发送方和接收方各自两次挥手即可。

只不过一方是被动,所以看上去像四次挥手。

 

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第11张图片

 

UDP特点
1  面向非连接
2  不维护连接状态,支持同时向多个客户端传输相同的消息
3  数据包报头只有8个字节,额外开销较小
4  吞吐量只受限于数据生成速率、传输速率以及极其性能
5  尽最大努力交付,不保证可靠交付,不需要维持复杂的连接状态表
6  面向报文,不对应用程序提交的报文信息进行拆分或者合并

 

TCP VS UDP

 

1 面向连接vstcp 是面向连接(tcp面向连接有三次握手的连接过程), udp是无连接 适合消息的多播发布,单个点向多个点传输
2 可靠性 tcp 可靠性(握手、确认、重传机制) udp是不可靠,
3 有序性 tcp 是有序性(tcp利用序列号保证消息的顺序交互),udp是无序
4 速度 tcp 速度比较慢,因为要创建连接,保证消息的可靠性和有序性、udp 比较适合速度要去快的,如多人游戏和视频直播
5 量级 tcp 是重量级的(tcp重量级,体现在元数据的头tcp20字节,udp八个字节),udp是轻量级的

TCP滑动窗口

 

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第12张图片

 

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第13张图片

 

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第14张图片

 

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第15张图片

 

网络基础—OSI七层模型、TCP三次握手、四次握手、UDP、TCP滑窗_第16张图片

你可能感兴趣的:(tcp,第三次握手)