传输层
索引
传输层的功能
传输层协议UDP和TCP
网络安全
TCP可靠传输的实现
TCP的流量控制
TCP的拥塞控制
TCP的运输连接管理
TCP/IP协议栈
(1)TCP:需要将要传输的文件分段传输,建立会话,具有可靠传输,流量控制,拥塞控制等功能
(2)UDP:一个数据包就能够完成数据通信, 不分段,不需要建立会话,不需要流量控制,不可靠传输(多播,广播,qq聊天)
(3)查看会话命令 netstat -n;查看建立会话的进程 netstat -nb
传输层协议和应用层协议关系
传输层协议 + 端口号 = 应用层协议
- 标识应用层协议——常见应用协议使用的端口
(1)http = TCP+80
(2)https = TCP + 443
(3)RDP = TCP + 3389(远程桌面)
(4)ftp = TCP + 21
(5)共享文件夹=TCP+445
(6)SMTP = TCP + 25(发邮件服务)
(7)POP3 = TCP + 110
(8)telnet=TCP+23
(9)SQL = TCP + 1433
(10)DNS = UDP + 53 - 发送数据方式
网络层:通过IP地址定位数据包发送给哪个主机
传输层:通过端口号定位数据包发给主机里的哪个服务,选择的端口号和应用层的服务是一一对应的
服务和应用层之间的关系
- 侦听
服务跟协议有一种直接对应关系,web->TCP 80; ftp -> TCP 21; SMTP -> TCP 25; POP3 -> TCP 110;用于网络安全,只开放必要的服务或者端口 - 关系
服务使用 TCP或UDP的端口侦听客户端请求
客户端使用IP地址定位服务器,使用目标端口定位服务
可以在服务器网卡上设置只开放必要的端口,实现服务器的网络安全 - 在Windows上安装服务
DNS服务、Web服务、SMTP(发送邮件)、POP3服务(收邮件服务) - 常用命令
netstat -an(查看服务侦听的端口)
netstat -n(查看建立的会话)
netstat -n | find “ESTABLISHED”(查看某个特定状态的会话)
netstat -nb(查看建立会话的进程)
telnet xxx.xxx.xxx.xxx 3389(远程桌面端口):测试远程计算机某个端口是否打开 - 更改服务使用的默认端口
可以通过修改默认端口号的方式迷惑入侵者,使系统更加安全 - 如何设置Windows网络安全
只开启必要的端口,设置本地连接 TCP/IP筛选
传输层功能
为相互通信的应用进程提供了必要的逻辑通信(网络层提供的是主机之间的逻辑通信);提供面向连接的TCP服务和无连接的UDP服务
- 传输层端口
端口号只有本地意义(本地不重复就行),即端口号只是为了标志本计算机应用层中的各进程,在因特网中不同计算机的相同端口号是没有联系的 - 三类端口
端口号用16位二进制表示,范围是0~65535
熟知端口: 0 - 1023
登记端口:1024 ~ 49151 (比如RDP 3389)
客户端端口:49152 ~ 65535
(查找指定端口 netstat -n | find “ESTABLISHED”)
TCP 和 UDP
UDP协议
- UDP主要特点
(1)UDP是无连接的,即发送数据之前不需要建立连接
(2)UDP使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制
(3)UDP是面向报文的,UDP没有拥塞控制,很适合多媒体通信的要求
(4)UDP支持一对一,一对多,多对一和多对多的交互通信
(5)UDP的首部开销小,只有8个字节(而TCP首部至少20字节) - UDP 首部格式
UDP传输层只包括首部(源端口+目标端口+长度(UDP用户数据报的总长度)+校验和,每个字段2个字节,共8字节)和数据;
计算检验和的时候,需要网络层的检验信息,需要添加伪首部(12个字节,包括8字节的源IP地址和目的IP地址,1个全0字节,1字节的协议号,2字节的UDP长度)
TCP
- 协议概述
(1)TCP 是面向连接的传输层协议
(2)每一条TCPL连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的(一对一)
(3)TCP提供可靠交付的服务(无差错,不丢失,不重复,按序发送)
(4)TCP 提供全双工通信
(5)面向字节流 - TCP协议特点
TCP 如何实现可靠传输
TCP 如何实现流量控制
TCP协议如何避免网络拥塞 - TCP的连接
每一条TCP 连接有两个端点
TCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口,TCP连接的端口叫做套接字
端口号拼接到IP地址即构成了套接字(socket = IP地址:端口号) - TCP可靠传输的工作原理——停止等待协议,超时会默认重传
(1)确认丢失和确认迟到
确认丢失:丢失重复的数据,重传确认;
确认迟到:收下迟到的确认,但是什么也不做。总之一句话,只要你没告诉我你收到了,那么我就默认你没有收到,然后重发
(2)可靠通信的实现
上面确认和重传机制,使得我们可以在不可靠的传输网络上实现可靠的通信;这种可靠传输协议常称为自动重传请求ARQ(Automatic Repeat reQuest);ARQ表明重传请求是自动进行的,接收方不需要请求发送方重传某个错误的分组
(3)信道利用率
停止等待协议的优点是简单,但缺点是信道利用率太低;RTT(数据往返时间)
信道利用率公式 U = T D T D + R T T + T A U=\frac{T_D}{T_D+RTT+T_A} U=TD+RTT+TATD
T D T_D TD是发数据包所用时间, T A T_A TA是接收数据包所用时间;
(4)流水线传输
从公式中可以看出,要想提高信道利用率,可以不停发包,连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认
(5)连续ARQ协议:发送方维持发送窗口
(6)累积确认:收到多个连续的之后再确认 - TCP报文段的首部格式
TCP首部包括20字节的固定首部和选项(长度可变,最长60个字节),然后加上TCP数据部分,就构成了TCP报文段。确认号是下一个要发送的序列号
20字节的固定首部
(1)源端口(2字节)
(2)目标端口(2字节)
(3)序号(4字节,序号指的是本数据报的数据部分的第一个字节是整个传输文件的第几个字节)
(4)数据偏移(4bit,指出TCP报文段从第几个字节开始是数据,实际上指出了TCP报文段的首部长度,单位是4b,所以数据偏移最大是15*4 = 60字节)
(5)保留(6bit,尚未使用,供今后可能的使用)
(6)紧急URG(urgent设为1的话,不管有多少在排队,都不管,直接传,即“先发”)+确认ACK(0的话确认号无效,1的话有效)+推送PSH(设为1的话,将包直接提交给应用程序,而不需要排队等待,即“先收”)+复位RST(取值为1的话,说明出现了异常,需要重新建立会话)+同步SYN(标志位,1时表示发起会话请求,说明这是一个连接请求或连接接收报文)+终止FIN(置为1,表示释放连接)
(7)窗口(2字节,设置两台计算机发送和接收缓存)
(8)校验和(2字节,校验范围是TCP首部和数据两部分,计算时,需要在报文前面加上12字节的伪首部)
(9)紧急指针(2字节,只有urgent为1时才有效,它指出本报文段中紧急数据的字节数,即紧急数据的末尾在报文段中的位置)
(10)选项:长度可变,最长 60-20 = 40个字节 - TCP如何实现可靠传输
以字节为单位的滑动窗口技术:SACK选择性确认,只需要重新发送丢失的包,提供相应机制使接收方能告诉发送方哪些数据丢失,哪些数据已经提前收到
超时重传时间的选择:超时重传时间应该略大于加权平均往返时间RTTs 新 的 R T T s = ( 1 − α ) ∗ ( 旧 的 R T T s ) + α ∗ ( 新 的 R T T 样 本 ) 新的RTTs = (1 - \alpha) * (旧的RTTs) + \alpha *(新的RTT样本) 新的RTTs=(1−α)∗(旧的RTTs)+α∗(新的RTT样本)
α \alpha α推荐使用1/8 - TCP协议如何实现流量控制
解决通信两端速度不一样的问题,通过调整窗口大小来控制流量,流量处理不过来时窗口自动变小 - TCP拥塞控制
出现资源拥塞的条件:对资源需求总和 > 资源大小;注意,流量控制是两台计算机的事,点对点通信,双方协商发送数据的快慢,以便接受端能来得及接收;而拥塞控制是网络出现堵塞,是网上多台计算机共同造成的,设计所有主机和路由器
(1)慢开始和拥塞避免:发送方维持拥塞窗口cwnd(congestion window),发送方控制拥塞窗口的原则是:(1)只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去(2)只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数
(2)注意点:“拥塞避免”并非指完全能够避免拥塞,利用以上措施要完全避免网络拥塞是不可能的;“拥塞避免”是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使得网络比较不容易出现拥塞
(3)快重传和快恢复:快重传算法首先要求接收方每收到一个失序报文段后就立即发出重复确认,这要做可以让发送方及早知道有报文段没有到达接收方; 当发送端收到连续的三个重复确认时,就执行“乘法减小”算法,把慢开始门限ssthresh减半,但拥塞窗口cwnd现在不设置为1,而是设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使得拥塞窗口缓慢的线性增大。
(4)发送窗口的实际上限值:发送方的发送窗口的上限值应当取为接收方窗口和拥塞窗口这两个变量中较小的一个,即应按以下公式确认 s w n d ( 发 送 窗 口 的 上 限 值 ) = M i n [ r w n d , c w n d ] swnd(发送窗口的上限值) = Min[ rwnd, cwnd] swnd(发送窗口的上限值)=Min[rwnd,cwnd] - TCP传输连接管理
三个阶段:建立连接、数据传送、连接释放。TCP连接的建立都是采用客户服务器方式,主动发起连接建立的应用进程叫做客户(client),被动等待连接建立的应用进程叫做服务器(server)
TCP的连接建立——用三次握手建立TCP连接
(1)首先客户端发送一个同步数据包(SYN = 1, ACK = 0, seq = x),服务器收到后,就会知道这是一个主动发起连接的数据包;
(2)收到后,服务器发送数据包(SYN = 1, ACK = 1, seq = y, ack = x + 1)作为回应
(3)收到确认后,客户端继续发送数据包(ACK = 1, seq = x+1, ack = y + 1);为何需要这个数据包再次确认?可以防止服务器资源浪费,这样如果服务器收不到响应时,可以直接放弃
过程中几种状态:客户端发送连接请求后(SYN-SENT) ->服务器(LISTEN) -> 客户端(SYN-SENT)->服务器(SYN-RCVD)->客户端、服务器(ESTABLISHED)
TCP连接释放——四次挥手
(1)客户端发送数据(FIN = 1, seq = u)
(2)服务器收到数据后,发送数据(ACK = 1, seq = v, ack = u + 1)(此时TCP处于半关闭状态,服务器如果继续发送数据,客户端仍然要接收)
(3)当服务器数据发送结束后,也需要发送数据确认结束(FIN = 1, ACK = 1, seq = w, ack = u + 1)
(4)客户端收到连接释放报文段后,必须发出确认(ACK = 1, seq = u + 1, ack = w + 1)
过程中的几种状态:客户端发送结束请求后(FIN-WAIT-1)->服务器(CLOSE-WAIT,通知应用进程)->客户端(FIN-WAIT-2)->服务器(LAST-ACK) 客户端进入TIME-WAIT状态,等4分钟左右之后自动结束。 - 利用TCP三次握手机制的网络攻击
SYN攻击:伪造不存在的IP地址和XP建立连接;攻击电脑编了一堆不存在的源IP地址,向被攻击电脑发起TCP连接请求。被攻击电脑给这些不存在的电脑回复这些请求,但是由于源IP地址并不存在,也就是说发起请求的电脑不存在,不会给它回复,它就一直等啊等
LAND攻击:让XP和自己建立会话,攻击电脑把发起TCP请求的数据包的源IP和目标IP都写成被攻击电脑的IP,让被攻击电脑不停地自己和自己建立会话,陷入死循环
传输层(段)、网络层(包)和数据链路层(帧)首部
数据链路层
MAC帧格式:目标地址(6字节),源地址(6字节),类型(2字节),末尾FCS校验(4字节),总共18字节,所以数据包大小为46~1500(64-18 = 46);传输时会在物理层中MAC帧前面插入8字节的前通码。
网络层
IP数据包格式:IP数据包是由首部和数据两部分组成:首部的前一部分是固定长度20字节,是所有IP数据报必须具有的;在首部的固定部分后面是一些可选字段,其长度是可变的(绝大多数没有);包的结构为(版本+首部长度+区分服务+总长度+分片标识+标志+片偏移+生存时间(TTL)+协议+首部检验和+源地址+目标地址)
传输层
TCP段的格式:固定首部20字节,还有可变部分,最长60字节