传输层
TCP和UDP
TCP 传输控制协议
- 可靠传输,需要将传输的文件分段,客户端和服务器端建立一个会话,直到数据传输完成。
- 流量控制功能
- qq传文件
- 查看会话:netstat -n
- 查看建立会话的进程: netstat -nb
- TCP+端口 标识一个应用层协议
UDP 用户数据报协议
- 不可靠传输,一个数据包就能够完成数据通信,不需要分段,不需要建立会话,无流量控制
- 域名解析DNS
- qq聊天
- 屏幕广播,多播,视频,语音
常见应用层协议所使用的的端口
- http:TCP+80
- https:TCP+443
- RDP: TCP+3389
- FTP: TCP+21
- SMTP: TCP+25
- telnet: TCP+23
- SQL: TCP+1433
- DNS: UDP+53
- POP3: TCP+53
服务和应用层协议之间关系
-
客户端使用IP地址定位服务器 使用目标端口定位服务
-
可以在服务器网卡上设置只开放必要的端口 实现服务器网络安全
-
传输层功能
- 为应用程序提供了逻辑通讯
-
端口号只具有本地意义,标志苯己酸应用层中的各进程,不同计算机的端口号没有关系
UDP
无连接,尽可能交付,没有拥塞控制,适合多媒体通讯,支持一对一,一对多,多对一,多对多,首部开销小,只有8个字节
首部
- 源端口 2byte
- 目标端口 2byte
- 长度 2byte
- 检验和 2byte
TCP
首部
-
20字节的固定首部
-
源端口 2字节
-
目标端口 2字节
-
序号 4字节
- 第一个字节是整个文件的第多少个字节
-
确认号
- 返回一个确认号,该确认号是下一个要接收的起始号
-
数据偏移
- 记录从多少开始是首部,多少开始是数据部分
-
URG
- =1 表示该包很紧急,不排队直接传
-
ACK
- 确认号,为序列号+1
-
SYN
- 双方同步传建立连接的时候标记为1,建立连接完毕之后重置为0
- =1发起会话的数据包
-
-
可变部分
TCP可靠传输的实现
-
ARQ
-
超时重传
- TCP每发送一个报文,就对这个报文段设置一次计时器,只要计时器的重传时间到了但还没有收到确认,就要重传这次报文段。重传时间略大于RTT。
-
信道利用率低
- U=TD/(TD+RTT+TA)
-
-
连续ARQ
- 维持一个滑动的发送窗口
- 信道利用率高
-
以字节为单位的滑动窗口技术
- A发送端先将要发送的数据包放到发送缓存中,B接收端在建立连接的时候告诉A自己滑动窗口的大小,A此时根据B的滑动窗口大小来设定发送端的滑动窗口大小(A<=B)在没有达到滑动窗口大小的时候A都可以用一直发。
- 出现丢失的包,SACK告诉A哪些数据包是丢失的,A只发送丢失的部分包
TCP的流量控制
- 解决通信两端处理速度不一致的问题
- 接收端告诉发送端 接收端滑动窗口的大小来实现的
TCP的拥塞控制
-
网络中所有的计算机如何防止网络堵塞,拥塞的条件:对资源需求的总和>可用资源。吞吐量:每秒钟所有机器通过网络产生的流量。发现网络中出现拥塞趋势,自动降低发包的速度。
-
慢启动算法
- 拥塞窗口最开始是1,以2倍速的速度增长,直到达到ssh后,从超过ssh的值开始逐渐+1,出现丢包,之后窗口变为1
-
拥塞避免
- 拥塞窗口最开始是1,以2倍速的速度增长,直到达到ssh后,从ssh的当前值开始逐渐+1,加法增大,直到出现丢包,窗口大小改为1
-
快重传
- 接收端发现丢包后,连着发三个确认让发送方重传丢失的包
-
快恢复
- 从连续收到三个重复的确认转入拥塞避免
- 收到三个重复确认执行快重传,快恢复到ssh的值开始加法增大,与快重传配套使用
- ssh=Min[rwnd(接收窗口),cwnd(拥塞窗口)
TCP的运输连接管理
-
三个阶段
-
建立连接
-
三次握手建立TCP连接
-
客户–>服务器 SYN=1,ACK=0,seq=x
-
服务器–>客户端 SYN=1,ACK=1,seq=y,ack=x+1
-
客户–>服务器 ACK=1,seq=x+1,ack=y+1
- 再次确认 避免了多次建立连接之后,后收到的包计算机不认可,另一台计算机仍在等待
- 两边的机器都编程established的时候才可以确定双方的连接建立成功
-
-
-
数据传送
-
连接释放
-
数据传输结束后,通信的双方都可释放连接,现在A应用的进程先向其TCP发出连接释放的报文段,并停止再发送数据,主动关闭TCP连接
-
客户–>服务器 FIN=1 ,seq=u
-
服务器–>客户端 ACK=1,seq=v ack=u+1
- 数据传输
-
服务器–>客户端 FIN=1,ACK=1,seq=w,ack=u+1
-
客户端–>服务器 ACK=1 seq=u+1,ack=w+1
-
-