N号林克

导航

计算机网络2

传输层:
UDP协议面向无连接,传输可靠性没有保障
应用程序对可靠性要求不高,对延迟和传输速度要求较高时可以采用
udp首部结构较为简单
 
TCP协议是一种面向连接的、可靠的、字节流服务
面向连接:使用tcp的应用在交换数据之前必须先建议一个tcp连接
字节流:两个应用程序通过tcp交换8bit字节构成的字节流
 
注意:TCP对字节流的内容不作任何解释。 TCP不知道传输的数据字节流是二进制数据,还是ASCII字符、EBCDIC字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释
若一方多次发送不同大小的信息,接受方可以多次接收
 
TCP提供可靠性原因:
1.应用数据被切割成最适合tcp发送的数据块
2.当tcp发出一个段后,自身启动计时器,规定时间内不能收到确认消息则重发
3.当tcp收到另一方tcp的消息后会发送一个确认消息,该操作会延迟一会儿
4.tcp将保持它首部和数据的检验和,确保传输过程中不会有任何变化,如果接收方发生变化则丢弃这个报文并不确认报文,希望发端超时重发
5.tcp报文作为ip数据来传输,ip数据报的传输可能会失序,因此tcp报文也有可能失序,tcp会对数据进行整理排序,将数据正确的交给应用层
6.ip数据报会重复,tcp端将丢弃重复的数据报
7.tcp能够提供流量控制,tcp连接的每一方都有固定大小的缓冲区域,tcp的接收端只允许另一端发送缓冲区能容纳的数据。防止了较快主机导致较慢主机的缓冲溢出
长度:最小20字节,最大60字节
32位序号:初始值为系统随机值,后续值为初始值+整个字节流的偏移量
数据值从小到大排列保证数据不乱序
32位确认号:数据报发送后,接收端返回确认机制
为接收到的序号加1,确认号能够处理重复报文段,序号相同则丢弃
4位首部长度:对底层而言都是数据,如何确认首部和数据部分,依靠首部长度判定,最高60字节最低20字节
6位保留位目前为0
控制位:ugr:紧急数据,发送端将数据插入到普通数据前
ack:确认报文段
psh:两应用程序交互时,有时希望另一方在输入一个按键后收到对方响应。这种情况下,可以使用push:发送方把push置为1并立即发送一个报文出去,接收方收到psh为1的报文则尽快发送报文而不是等缓冲区填满
rst: tcp出现严重错误,必须释放连接重新建立,还可以用来拒绝一个非法连接或拒绝打开一个连接
syn:连接请求时:syn为1ack为0,对方同意链接:syn为1ack为1
fin:用来释放一个连接,表示发送发数据已发送完毕,要求释放连接
 
16位窗口:流量管控,窗口值告诉对方,从本报文段确认号算起,允许对方发送的数据量
16位校验和:CRC循环冗余检测算法
16紧急指针:TCP的紧急指针是发送端向接收端发送紧急数据的方法。紧急指针是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。这个字段是紧急指针相对当前序号的偏移,不妨称之为紧急偏移
 
 
TCP管理控制机制:
3次握手:第一次握手:当客户端有需求时向服务端发送一个syn报文段,等待对方应答
第二次握手:服务端一直处于监听状态,服务端收到请求,进行应答,发送携带ack和syn的报文段
第三次握手:客户端收到服务器的应答,返回ack报文段,确认建立连接
 
四次挥手:第一次挥手:客户端要求close,服务器会接收fin报文段,客户端进入fin_wait_1状态
第二次挥手:服务器端发送一个确认报文段并进入close_wait状态
第三次挥手:客户端接收到确认消息后,进入fin_wait_2状态,等待服务器处理完数据,服务器处理完数据后发送结束报文段fin,服务器进入last_ack状态,等待最后一个客户端的应答ack
第四次挥手:客户端接收到服务端的fin报文段后,发送一个ack报文段确认自己收到了fin
 
同时打开:双方同时发送syn请求,原本3次握手会变成4次数据交换
同时关闭:双方同时发送fin请求,也是4次数据交换
半关闭:由于在全关闭的状态下,当服务器端的数据发送完毕要关闭连接的时候,这时客户端会接收到服务器端的请求,但由于使用全关闭状态,则客户端向服务器端发送的断开连接确认请求将无法再次返回给服务器端。此时就需要用到半关闭状态。
 
TCP流量控制机制:滑动窗口机制:tcp通过动态改变窗口大小来实现流量控制。主要在返回的ack报文报中包含窗口大小
拥塞控制:防止过多的数据注入到网络中,使网络中路由器或链路不过载 常用方法:1.慢启动,拥塞避免2.快重传,快恢复
 
拥塞窗口(cwnd):发送方自身拥有一个动态变化的拥塞窗口,其大小取决于网络拥塞程度。如果发送信息时在一定时间内没有收到ack消息则判定网络堵塞
慢启动:在发送数据时如果直接注入大量数据会造成网络堵塞,可以先探测一下网络情况,如果良好则慢慢增加拥塞窗口大小,具体是ack后拥塞窗口大小加倍,发生拥塞则将cwnd设置为1
拥塞避免:使拥塞窗口大小每次增加1,为了防止拥塞窗口大小增加过大,所以需要设置一个慢开始门限(ssthresh)
当cnwd<ssthresh时,启动慢启动算法
当cwnd>ssthresh时,拥塞窗口理性的线性增长,cwnd逐次加1
门限大小为上次发生丢包时的二分之一
 
快重传:发生丢包后,超时重传将极大的降低cwnd,但若网络只是应为抖动而产生丢包,因此产生快重传。接收方收到一个失序的报文后立即发出一个确认报文而不是等待自己发出数据时才发出。如果发送方连续收到3个ack,则不考虑重传计时器,立即发送消息。快重传与超时重传的区别在于:快重传将cwnd设为1/2,超时重传设为初始值。两者都将ssthresh设为cwnd的1/2。
快恢复:当发送发连续收到3个ack时,将ssthresh减半,将cwnd设为现在的ssthresh,执行拥塞避免算法,使拥塞窗口大小慢慢增大
 
超时重传机制:发送一个数据后开始一个计时器,若没有接收到ack消息则继续重新发送知道接收到ack为止

posted on 2020-08-14 21:48  N号林克  阅读(55)  评论(0编辑  收藏  举报