传输层
一、OSI和DoD模型
传输层最大数据包是65535字节,而网络层数据最大只有1480字节。所以需要分段,但是只要分段,就有可能丢包,因为网络层不负责可靠传输。所以要求服务器和客户端保持会话,直到数据传输完成。
二、传输层协议和应用层协议的关系
(1)TCP和UDP协议和不同的端口即可对应一个应用层的协议。
(2)熟知数值一般为0-1023,登记端口号数值1024-49151,客户端口号数值为49152-65535.
(3)常用的应用层协议使用的端口(号):
http = TCP + 80
Https = TCP + 443
RDP = TCP + 3389
ftp = TCP + 21
共享文件夹 = TCP + 445
SMTP = TCP + 25
POP3 = TCP + 110
telnet = TCP + 23
SQL = TCP + 1433
DNS = UDP + 53
三、TCP协议与UDP协议
1.TCP(Transmission Control Protocol)传输控制协议
应用场景:需要将要传输的文件分段传输时;就需要TCP协议来建立会话实现可靠传输;同时也有流量控制功能。(例如QQ传文件)
查看会话 netstat -n
查看建立会话的进程 netstat -nb
2.UDP(User Data Protocol)用户数据报协议
应用场景:一个数据包就能完成数据通信;不需要建立会话和流量控制;多播/广播;是一种不可靠传输。(例如QQ聊天,屏幕广播)
四、如何查看服务侦听的端口
netstat -a
netstat -an 以数字的形式查看端口
netstat -n 查看建立的会话
netstat -nb 查看建立会话的进程
telnet 192.168.80.100 3389 测试到远程计算机某个端口是否打开
更改服务使用默认端口,可以迷惑病毒,使系统更加安全。
设置本地连接 TCP/IP筛选,会使Windows网络更加安全。
五、传输层功能和端口范围
1.传输层协议和网络层协议的主要区别
网络层实现如何把数据包从这个地址(服务器)发送到另一个地址(服务器)。
传输层实现如何让这个应用程序找到对应计算机的应用程序(相对应的应用程序实现逻辑通信)。
2.传输层主要功能
(1)传输层为应用进程之间提供了端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。
(2)传输层还要对收到的报文进行差错检验。
(3)传输层提供面向连接(TCP)和无连接(UDP)的服务。
六、UDP协议
1.UDP协议的特点
(1)UDP是无连接的,即发送数据之前不需要建立连接。
(2)UDP使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
(3)UDP是面向报文的,适合多媒体通信的要求。
(4)UDP支持一对一,一对多,多对一,多对多交互通信。
(5)UDP首部开销小,只有8个字节。
2.UDP协议的首部格式
首部中的长度指的是UDP用户数据报的长度(首部+数据)。伪首部是IP数据包首部的后部分。
七、TCP协议
1.TCP特点
(1)TCP是面向连接的传输层协议。(三次握手)
(2)每一条TCP连接智能有两个端点(endpoint),每一条TCP连接只能时点对点的(一对一)。
(3)TCP提供可靠交付的服务。(确保不丢包)
(4)TCP提供全双工通信。(因为需要接收端的反馈,例如如果接收端处理不过来,可让发送端慢一点,流量控制)
(5)面向字节流。
如果要传输一个比较大的数据,首先一次只会传输一小块,这个数据块的大小是没有规律的。加上数据包数据帧的头,发送给接收端,接收端去掉首部,再次拼接。
2.TCP的连接
(1)每一条TCP连接有两个端点。
(2)TCP连接的端点叫 套接字(socket).
套接字socket = (IP地址:端口号)
每一条TCP连接唯一地被通信两端的两个套接字所确定,即:
TCP连接 ::= {socket1, socket2} = {(IP1:port1), (IP2:port2)}
3.TCP实现可靠传输
(1)可靠传输的工作原理——停止等待协议。
(2)确认丢失和确认迟到
(3)可靠通信的实现
这种可靠传输的协议常称为自动重传请求ARQ(Automatic Repeat reQuest)。
ARQ表明重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组。
缺点:信道利用率低
(4)流水线传输(发送方)
发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。由于信道上一直有数据不间断的传送,这种传输方式可获得很高的信道利用率。
(5)连续ARQ协议
如果1确认收到了,则滑动窗口。
(6)累计确认(接收方)
接收方一般采用累计确认的方式。
优点:容易实现,信道利用率高。
缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息。
4.TCP报文段的首部格式
(1)源端口:2个字节16位。
(2)目的端口:2个字节16位。
(3)序号:当前数据的第一个字节在整个文件中的序号。
(4)确认号ack:接收端发送,提示发送端下一次该发的数据在整个文件中的序号。接收端收到后,会把这个序号之前的数据从缓存中删掉。
(5)数据偏移:当前TCP报文段第多少个字节后是TCP的数据部分了。数据偏移最多表示1111,即15,他最多可以表示15乘以4,即60个字节的偏移量,所以选项+填充最多只能是40个字节。
(6)保留:6位,无作用。
(7)URG:urgent,意思是优先级高,发送端优先发送,而不是在缓存中排队。
(8)ACK:acknowledge,1意味着确认建立了会话。
(9)PSH:1意味着接收端优先读取,而不是在缓存中排队。
(10)RST:reset,1意味着TCP会话出现严重错误,必须释放和重新连接。
(11)SYN:同步。1意味着要发起会话。
(12)FIN:finish,1意味着释放连接。
(13)窗口:接收端先发,发送端根据接收端的窗口尺寸确定发送端窗口尺寸。
(14)检验和:
(15)紧急指针:只有URG为1才有用。
访问互联网时所涉及的协议:
第一步,ARP,识别网关MAC地址
第二步,UDP(DNS同时占用UDP和TCP的53端口),域名解析
第三步,TCP,建立可靠传输
5.TCP如何实现可靠传输
(1)以字节为单位的滑动窗口技术
(2)超时重传时间的确定
TCP每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到了,但是还没有收到数据,那么就重传这一报文段。
RTTs(new) = (1 - alpha) x (RTTs(old)) + alpha x (new RTT样本)
超时重传时间应略大于上面得出的加权平均往返时间RTTs。alpha推荐值是0.125.
这个公式的目的是根据网速和带宽的实时情况调整往返时间。
6.TCP如何实现流量控制
解决通信两端处理时间不一样的问题。通过实时调整滑窗尺寸的大小(尺寸甚至可以是0)来实现流量控制。接收端主动调整滑窗大小,发送端根据接收端发送的报文调整相应的滑窗。发送端也会定时发送报文向接收端确认滑窗信息,避免接收端发送的相关调整滑窗大小的报文丢失带来的影响。
7.TCP如何避免网络拥塞
7.1 慢开始和拥塞避免
(1)发送方维持 拥塞窗口cwnd(congestion window)
(2)发送方控制拥塞窗口的原则是:
只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去;
只要网络出现拥塞,拥塞窗口就减少一些,以减少注入到网络中的分组数。
(3)慢开始算法的原理
(4)设置慢开始门限状态变量ssthresh
慢开始门限状态变量ssthresh的用法如下:
当cwnd<ssthresh时,使用慢开始算法;
当cwnd>ssthresh时,停止使用慢开始算法,改用拥塞避免算法;
当cwnd=ssthresh时,使用慢开始算法或拥塞避免算法均可;
(5)拥塞避免算法的思路
让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,使拥塞窗口cwnd按线性规律缓慢增长。
(6)当网络出现拥塞时对策
无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但是不能小于2)。
然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。
这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够的时间吧队列中积压的分组处理完毕。
(7)慢开始和拥塞避免算法的实现举例
7.2 快重传和快恢复
快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认,这样做可以让发送方及早知道有报文段没有到达接收方。
当发送端收到连续三个重复的确认时,就执行“乘法减少”算法,即把慢开始门限ssthresh减半,但拥塞窗口cwnd现在不设置为1,而是设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
发送窗口的上限制 = min {rwnd, cwnd}.
8.TCP传输连接管理
传输连接有三个阶段,即:连接建立,数据传送,连接释放。
举例:
附录:
参考文献: