网工基础知识整理:传输层

        传输层位于OSI模型的第四层,实现端对端的数据传输,实现数据的分段、传输、组装及差错控制、流量/拥塞控制等功能。

        一、TCP

        TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

        (一)TCP报文首部

源端口(16bit)

目的端口(16bit)

序列号seq(32bit)

确认号ack(32bit)

报头长度(4bit)

保留(6bit)

U

R

G

A

C

K

P

S

H

R

S

T

S

Y

N

F

I

N

窗口(16bit)

校验和(16bit)

紧急指针(16bit)

选项(长度可变)

填充

数据部分

        源/目端口:表示源端和目的端的应用进程,范围0-65535。

        序列号:标识了TCP发送端到TCP接收端的数据流的第一个字节。新连接建立时,第一个报文段的SYN位启用,此时第一个序列号是随机的,不能为0或1。

        确认号:确认号包含的值是该确认号的发送方期待接收的下一个序列号。该字段在ACK位被启用的情况下起效。

        报头长度:单位为4B,值为0101-111,即20B-60B。

        保留:通常为0。

        URG(1bit):紧急位。如传输带外数据,需将此位置1。紧急指针字段也需将此位置1才有效。表示数据需尽快传送。

        ACK(1bit):确认位。表示“确认号”字段有效,连接建立后一般都是启用状态。

        PSH(1bit):推送位。接收方应尽快将该报文段交给上层协议,无需等待缓存满。

        RST(1bit):复位位。重置连接。

        SYN(1bit):同步位。发起连接,初始化一个连接的同步序列号。

        FIN(1bit):终止位。释放连接,表示该报文段的发送方已结束向对方发送数据。

        校验和:对TCP头部和数据部分进行校验和计算。

        紧急指针:该字段在URG字段值位时起效,“指针”是一个必须要加到报文段序列号字段上的一个正偏移,以产生紧急数据的最后一个字节的序列号。

        (二)TCP建立连接。

        TCP通过三次握手来建立连接。流程如下:

        1.  源主机向目的主机发送一个SYN位置1的TCP报文,seq序列号是随机的,即SYN=1、seq=x,报文发出后,源主机进入SYN-SENT状态。

        2.  目的主机收到源主机SYN=1的报文,发回确认报文。该报文中ACK位置1,SYN位置1,确认号ack=x+1,序列号seq=y(随机产生)。该报文发出后,目的主机进入SYN-RCVD状态。

        3.  源主机收到目的主机回复后,进入ESTABLISHED状态,向目的主机返回一个确认报文。该报文中ACK位置1,确认号ack=y+1,序列号seq=x+1。目的主机收到源主机报文后,进入ESTABLISHED状态。

        (三)TCP释放连接

        TCP通过四次挥手来释放连接。流程如下:

        1.  源主机向目的主机发送一个报文,用以释放连接。其中,FIN=1,自身序列号seq=x,源主机进入FIN-WAIT状态。

        2.  目的主机收到后,向源主机回复。该报文中ACK位置1,确认号ack=x+1,自身序列号seq=y,目的主机进入CLOSE-WAIT状态。此时,源主机停止发送数据,但目的主机仍然可以发送数据,TCP连接为半关闭状态(HALF-CLOSE)。

        3.  目的主机无数据发送后,向源主机发送释放报文(FIN=1,ACK=1,确认号ack=x+1,自身序列号seq=z),目的主机进入LAST-ACK状态。

        4.  源主机收到释放报文后,向目的主机发出确认报文。(ACK=1,确认号ack=z+1,序列号seq=x+1),进入CLOSE状态。

        (四)TCP拥塞控制。

        1.  拥塞控制与流量控制的区别

        ①拥塞控制:在两端及所有中间网络节点中进行控制。

        ②流量控制:仅在发送端和接收端进行,是局部控制。

        2.  慢启动与拥塞避免

        ssthresh:慢启动门限值。

        cwnd:拥塞窗口。

        慢启动算法:每轮传输后cwnd值翻倍。

        拥塞避免算法:每轮传输后cwnd值加1。

        ①cwnd<ssthresh时,启动慢启动算法。

        ②cwnd=ssthresh时,即可使用慢启动,也可使用拥塞避免算法。

        ③cwnd>ssthresh时,启动拥塞避免算法。

        当出现网络拥塞,发生超时,则执行乘法减小(将此时的cwnd值减半,并将该值作为ssthresh阈值),随后从cwnd的初始值再次开始执行慢启动算法。

        3.  快重传和快恢复

        快重传:发送方只要收到三个连续重复确认,就立即重传对方未收到的报文段,无需等待重传计时器到期。

        快恢复:当发送方只要收到三个连续重复确认时,执行乘法减小(将此时的cwnd值减半,并将该值作为ssthresh阈值),随后从此时减半的cwnd值开始执行拥塞避免算法。

        4.  随机早期检测RED

        路由器采用随机早期检测(RED)算法,来避免“全局同步”现象。

        该算法中,路由器队列维持长度最小门限值THmin和最大门限值THmax,对于每个到达的数据报都先计算平均队列长度Lav。

        ①若Lav<THmin。则将新到达的数据报放入队列排队。

        ②若Lav>THmax。则将新到达的数据报丢弃。

        ③若THmin<Lav<THmax。则按照概率p,将到达的数据报丢弃。

        (五)重传时间

        1.  往返时间  

                RTT=链路层传播时间+端点协议栈处理时间+中间设备处理时间

        2.  加权平均往返时间  

                RTTS初始值=计算出的第一个RTT;

                RTTS=(1-α))×(旧的RTTS)+α×新的RTT样本;

                α建议取1/8。

        3.  超时重传时间

                RTO=RTTS+4×RTTD(RTT的加权平均值);

                RTTD初始值为(1/2)×RTT样本值;

                新的RTTD=(1-β)×(旧的RTTD)+β×|RTTS-新的RTT样本|;

                β建议取1/4。

        (六)TCP计时器

        1.  重传计时器。

        2.  坚持计时器。防止“零窗口死锁”发生。数据传输中可能会出现窗口值报文丢失,当报文接收端告知发送端其能够继续接收数据的报文丢失,数据发送端依旧认为窗口值为零的情况。计时器到期后,数据接收端会主动向发送端发起探测。

        3.  保活计时器。用来防止两个主机间的TCP连接长时间空闲,一般是为服务器应用程序提供,但TCP连接的两端都可以开启此功能。缺省为2小时,向对方发送若干次探测报文。Linux和Mac OS X系统中探测报文发送9次,间隔为75秒;FreeBSD系统中探测报文发送8次,间隔为75秒;Windwos系统中探测报文发送10次,间隔为1秒。若这些探测报文均无响应,则终止连接。

        4.  时间等待计时器。连接终止时,不会立即断开连接,而是等待一段时间,确保能收到对端的响应。

        二、UDP

        UDP是一种不可靠的、无连接的数据报服务。

        (一)UDP报文头部

源端口号(2B)

目的端口号(2B)

长度(2B)

校验和(2B)

数据

        源/目端口:表示源端和目的端的应用进程,范围0-65535。源端口号在不需要对方回信时可填写全0。

        长度:表明UDP头部字段和数据字段的总长度字节数。

        校验和:覆盖UDP头部、数据、伪首部。在IPv4中为可选字段,在IPv6中为必选字段(IPv6头部无校验字段)。

        校验和计算方法:按照16位为1组展开(含伪首部)。若最高位没有进位,则相加取反;若最高位进位,则将最后位加1后再取反

        (二)伪首部

源IP地址(4B)

目的IP地址(4B)

0(1B)

17(1B)

UDP长度(2B)

        伪首部在实际传输中不会进行传输,用于源/目IP及UDP数据报校验。伪首部本身违反分层规则,当数据传递到(或来自于)UDP时,IP层的信息已经存在了。

        三、端口

        (一)系统端口(低位端口、熟知端口):0-1023。

        (二)登记端口(注册端口):1024-49151。

        (三)客户端使用端口(动态/私有端口):49151-65535。

        备注:后两个加一起也被称为“高位端口”。

        (四)基于TCP的常用端口号

                20   FTP-DATA

                21   FTP

                22   SSH

                23   TELNET

                25   SMTP(邮件发送)

                80   HTTP

                110  POP3(邮件接受)

                143  IMAP

                179  BGP

                443  HTTPS

                3389 RDP(远程桌面服务)

      (五)基于UDP的常用端口号

                53   DNS(当数据传输量较大时,也会使用TCP连接,端口也为53)

                67   DHCP-SERVER

                68   DHCP-CILENT

                69   TFTP

                161  SNMP

                162  SNMP-TRAP

                500  IKE

                520  RIP

                546  DHCPv6-Cilent

                547  DHCPv6-Server

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值