• 计算机网络-运输层


    运输层

    位置:面向通信的最高层,面向用户功能的最底层

    端到端通信:主机间真正的通信是进程间的通信,IP层只能送到主机。

    复用(multiplexing)和分用(demultiplexing):不同的应用程序可以使用同一个运输层传输,接收方在运输层把数据交给目的进程。

    总结:网络层提供主机间的逻辑通信,运输层提供进程之间的逻辑通信。

    两大协议:UDP用户数据报协议(User Datagram Protocol)和TCP传输控制协议(Transmission Control Protocol)。

    端口:只有本地意义,用来支持复用分用。

    端口号分类:熟知端口号(well-known port number)0-1023  登记端口号1024-49151 短暂端口号 49152-65535

    UDP

    特点:1.无连接(发送前不需要建立连接)2.尽最大努力交付(不可靠)3.面向报文(对于应用层报文不拆分合并)4.没有拥塞控制  5.多对多通信 6.首部短(8字节)

    首部格式:原端口+目的端口+长度(整个报文的长度,包括头和数据)+校验和(如果不想用检验功能,则全部置0)(长度2222共8字节)

    伪首部:仅在计算检验和时用,原ip+目的IP+0+17+udp长度

    检验和计算:首部检验和初始化0,再把首部和伪首部分成16为字串,按二进制反码计算。

    TCP

    特点:1.面向连接(发送前建立连接)2.可靠交付  3.面向字节流(把应用层数据看成一串无结构字节流)4.全双工(使用缓存实现)5.一对一

    套接字socket:IP地址+端口号

    TCP连接=socket1+socket2

    连续ARQ协议:

    发送方每收到一个确认就把发送窗口向前滑动一个分组。接收方采用累积确认的方式(收到了几个分组后发送最后一个分组的确认,表示此分组为止所有的都收到了),发送方采用回退N步 go back n方式。

    TCP报文格式:

    首部:20字节固定:原端口目的端口,序号(字节流中每一个字节都有序号,首部序号指本报文第一个字节的序号),确认号(希望收到的下一个字节序号,确认号n表示n-1为止的都以收到),数据偏移(单位为4字节,最大值15,表示首部长度),保留,控制位,窗口(以字节为单位,接收方允许对方发送的数据量),检验和,紧急指针,其他

    6个控制位:紧急URGent,确认ACKnowledgment(ack=1确认字段有效),推送PuSH,复位ReSet,同步SYNchronization,终止FINis

    滑动窗口:

    窗口移动状态:不动(没有收到新的确认)和前移(收到新确认)。

    窗口内容:已发送并收到确认|窗口后沿|已发送未收到确认|尚未发送|窗口前沿|不允许发送。

    缓存内容:发送窗口:准备发送的数据和已发送未收到确认的数据。接收窗口:尚未被应用程序读取的和未按序到达的。

    超时重传:发送方在规定时间内没有收到确认则重传。

    导致重传的两种方法总结:

    1.超时:

    RTT计算:(RTTC:报文往返时间 RTTS:加权往返时间)

    初始化RTTS为本次测得RTT

    随后RTTS=(1-α)旧RTTS+α新RTT

    其中推荐α=0.125

    RTO计算:(RTO:超时重传时间)

    RTO=RTTS+4RTTD

    其中RTTD第一次等于RTT的一半

    随后每次RTTD=(1-ß)旧RTTD+ß|RTTS-本次RTT|

    ß<1,推荐0.25

    2.冗余ACK

    TCP规定每次收到一个报文的3次ACK,表明随后的报文丢失,这叫快速重传。

    TCP流量控制:

    流量控制就是让对方不要发的太快,让接收方来得及接收。

    发送方发送窗口不能超过接收方给出的接收窗口的数值。

    为了防止rwnd=0后窗口增大的报文丢失导致的死锁,TCP设置持续计数器,只要收到零窗口通知就启动计数器,计数器到时后发送零窗口探测报文(tcp规定即使是零窗口也必须接受零窗口检测报文、确认报文和紧急数据报文)。

    TCP拥塞控制:

    方法:慢开始、拥塞避免、快重传、快恢复

    1.慢开始(指数增加):

    每一次RTT,Cwnd大小加倍,直到一个阈值,开始拥塞避免。

    2.拥塞避免(加法增加):

    每个RTT,Cwnd加一个MSS。

    当出现一次超时重传,阈值=cwnd/2,cwnd置1(乘法减小)

    注意:当某次慢开始后的值大于阈值时,则令其等于阈值(不跨过阈值)。

    快恢复:与拥塞控制不同在于把cwnd设为新阈值后开始假发增大(跳过了cwnd从1开始到阈值的指数增加过程)

    发送窗口上限=min{cwnd,rwnd}

    TCP连接管理:

    连接的三个阶段:连接建立、数据传送、连接释放。

    主动发起连接的叫做客户(client),被动等待建立的应用进程叫服务器(server)

    连接建立:三报文握手

    起始双方都处于关闭状态

    1.客户端创建传输控制模块,发送请求报文(SYN=1,同时选择初始序号seq=x,tcp规定SYN报文不能携带数据,但要消耗一个序号),这时客户端进入SYN—SENT(同步已发送)状态。

    2.服务端收到请求后,同意建立连接,发送确认(SYN=1,ACK=1,确认号是x+1,同时为自己选择起始序号seq=y),服务器进入SYN—RCVD(同步收到)状态。

    3.客户端收到确认后向服务端发送确认,自己进入established状态,确认报文ack=1,确认号y+1.自己的序号seq=x+1,服务器收到后也进入established状态。

    连接释放:四报文握手

    1.客户端发送fin=1(fin不携带数据也要消耗掉一个序号)。

    2.服务端收到后发送确认(ACK=1)现在TCP连接处于半关闭状态,客户端到服务端的通信断开,服务端到客户端的通信保持。

    3.服务端发出FIN=1,ack等于上次的ack(因为没有收到数据)。

    4.客户端收到后发出确认ACK=1.

    然后TCP连接经过时间等待计时器设置的2msl后客户端进入关闭状态,MSL是最长报文段寿命。

  • 相关阅读:
    无锁编程(五)
    Linux Kernel CMPXCHG函数分析
    无锁编程(四)
    无锁编程(三)
    无锁编程(二)
    无锁编程(一)
    无锁编程
    Linux同步机制
    Linux同步机制
    bootstrap css编码规范
  • 原文地址:https://www.cnblogs.com/liuzey/p/11047797.html
Copyright © 2020-2023  润新知