【计算机网络】传输层

【计算机网络】传输层


传输层概述

传输层功能

一,实现了不用主机进程间的通信。

  • 在网络层,解决的是主机到主机的通信;利用IP地址
  • 在传输层,解决的是进程到进程的通信;利用套接字Socket(由IP地址+端口号组成)

二,传输层对收到的报文进行差错检验

端口

在程序层面传输数据,需要利用端口,来标明数据,类似于IP,一个ip地址代表一个主机,而一个端口代表一个程序

  • 服务端端口号
    • 熟知端口号:0-1023
    • 登记端口号:1024-49151
  • 客户端端口号:49152-65535(随机分配的)

常用端口号如下:

端口 服务
20、21 FTP
22 SSH
80 HTTP
443 HTTPS
53 DNS

用户数据报协议UDP

UDP概述

  1. 无连接的
  2. 不可靠交付,出错直接丢弃
  3. 面向报文的:一次发送一个完整的报文
  4. 用来传输少量数据
  5. 无拥塞控制,延时小,适合于直播,网络电话

UDP的首部格式

UDP首部字段很简单,由4个字段组成(其中伪首部会被丢弃),每个字段的长度都是两个字节,共8字节

  • 源端口 原端口号,在需要对方回信时选用,不需要时可全0
  • 目的端口 目的端口号,这在终点交付报文时必须使用,不然数据交给谁呢?
  • 长度 UDP的长度,最小值为8字节,仅有首部
  • 检验和 检测用户数据报在传输过程是否有错,有错就丢弃。

在传输的过程中,如果接收方UDP发现收到的报文中的目的端口不存在,会直接丢弃,然后由网际控制报文协议ICMP给发送方发送“端口不可达”差错报文。

伪首部不在网络中传输,只是在计算检验和,不向下传递也不向上递交。

传输控制协议TCP

TCP概述

  1. 面向连接的传输协议
  2. 提供可靠交付服务,无差错
  3. 全双工的通信。
  4. 面向字节流的,会把文件分成多个

TCP报文段首部

源端口和目的端口 各占两个字节,TCP的分用功能也是通过端口实现的。

序号 占4个字节,范围是[0,232],TCP是面向字节流的,每个字节都是按顺序编号。例如一个报文段,序号字段是201,携带数据长度是100,那么第一个数据的序号就是201,最后一个就是300。当达到最大范围,又从0开始。

确认号 占4个字节,是期望收到对方下一个报文段的第一个字节的序号。并且确认号为N,则表示序号N前所有的数据已经正确收到了。

数据偏移 占4位,表示报文段的数据部分的起始位置,距离整个报文段的起始位置的距离。间接的指出首部的长度。

保留 占6位,保留使用,目前为0.

URG(紧急) 当URG=1,表明紧急指针字段有效,该报文段有紧急数据,应尽快发送。

ACK(确认) 仅当ACK=1时,确认号才有效,连接建立后,所有的报文段ACK都为1。

PSH(推送) 接收方接收到PSH=1的报文段,会尽快交付接收应用经常,不再等待整个缓存填满再交付。实际较少使用。

RST(复位) RST=1时,表明TCP连接中出现严重差错,必须是否连接,再重连。

SYN(同步) 在建立连接时用来同步序号。当SYN=1,ACK=0,则表明是一个连接请求报文段。SYN=1,ACK=1则表示对方同意连接。TCP建立连接用到。

FIN(终止) 用来释放一个连接窗口。当FIN=1时,表明此报文段的发送方不再发送数据,请求释放单向连接。TCP断开连接用到。

窗口 占2个字节,表示发送方自己的接收窗口,窗口值用来告诉对方允许发送的数据量。

校验和 占2字节,检验和字段查验范围包括首部和数据部分。

紧急指针 占2字节,URG=1时,紧急指针指出本报文段中的紧急数据的字节数(紧急字节数结束后为普通字节)。

选项 长度可变,最长可达40字节。例如最大报文段长度MSS。MSS指的是数据部分的长度而不是整个TCP报文段长度,MSS默认为536字节长。窗口扩大,时间戳选项等

TCP连接管理

TCP建立连接-三次握手

第一次:客户端发送连接请求报文给服务端,其中SYN=1,seq=x。发送完毕后进入SYN_END状态。

第二次:服务端接收到报文后,发回确认报文,其中ACK=1,ack=x+1,因为需要客户端确认,所以报文中也有SYN=1,seq=y的信息。发送完后进入SYN_RCVD状态。

第三次:客户端接收到报文后,发送确认报文,其中ACK=1,ack=y+1。发送完客户端进入ESTABLISHED状态,服务端接收到报文后,进入ESTABLISHED状态。到此,连接建立完成。

三次握手原因

避免资源被浪费掉。如果在第二步握手时,由于网络延迟导致确认包不能及时到达客户端,那么客户端会认为第一次握手失败,再次发送连接请求,服务端收到后再次发送确认包。在这种情况下,服务端已经创建了两次连接,等待两个客户端发送数据,而实际却只有一个客户端发送数据。

TCP断开连接-四次挥手

第一次挥手:客户端发送FIN=1,seq=x的包给服务端,表示自己没有数据要进行传输,单面连接传输要关闭。发送完后,客户端进入状态。

第二次挥手:服务端收到请求包后,发回ACK=1,ack=x+1的确认包,表示确认断开连接。服务端进入CLOSE_WAIT状态。客户端收到该包后,进入FIN_WAIT_2状态。此时客户端到服务端的数据连接已断开。

第三次挥手:服务端发送FIN=1,seq=y的包给客户端,表示自己没有数据要给客户端了。发送完后进入LAST_ACK状态,等待客户端的确认包。

第四次挥手:客户端收到请求包后,发送ACK=1,ack=y+1的确认包给服务端,并进入TIME_WAIT状态,有可能要重传确认包。服务端收到确认包后,进入CLOSED状态,服务端到客户端的连接已断开。客户端等到一段时间后也会进入CLOSED状态。

四次挥手原因 由于TCP的连接是全双工,双方都可以主动传输数据,一方的断开需要告知对方,让对方可以相关操作,负责任的表现。

TCP可靠传输的实现

确认和超时重传

TCP流量控制

滑动窗口协议

TCP滑动窗口协议主要为了解决在网络传输数据的过程中,发送方和接收方传输数据速率不一致的问题,从而保证数据传输的可靠性,达到流量控制的效果。 发送方中的数据分为三种:

  • 发送已确认
  • 发送未确认
  • 未发送

接收方数据分为三种:

  • 已接收和确认但未被上层读取
  • 接收未确认

在发送方的滑动窗口中,可分为发送窗口和可用窗口。发送窗口中的数据已发送接收方,但未接到接收方的确认;可用窗口则表示发送方还可以发送多少数据。发送方的窗口大小会受到接收方窗口的改变而改变。

TCP拥塞控制

拥塞

什么是拥塞呢,在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就会变坏了,这种情况就叫拥塞。网络资源常指网络链路容量(带宽)、交换结点中的缓存和交换处理机。

当出现拥塞,条件允许一般都是通过添加网络资源,例如带宽换成更大的,但这治标不治本,而且不一定总是有用。网络拥塞往往是有许多因素引起的,因此就需要拥塞控制了。

拥塞控制

拥塞控制指防止过多的的数据注入到网络中,这样可以使网络中的路由器或链路不过载。拥塞机制是一个全局性的过程,涉及到所有主机、所有路由器,以及与降低网络传输性能有光的所有因素。

而滑动窗口协议的流量控制,是指点到点的通信量控制,是端到端的问题。

TCP的拥塞控制方法

TCP进行拥塞控制的算法有四种:慢开始、拥塞避免、快重传、快恢复


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×