运输层:向应用层提供通信服务
常见端口号:
FTP:文件传输协议,使用端口号21(用于连接)和20(用于传输数据)
TELNET:远程登录协议,使用端口号23
SMTP:电子邮件传输协议,使用端口号25(用于发送邮件)
POP3:邮局协议版本3,使用端口号110(用于接收邮件)
DNS:域名系统,使用端口号53(一个域名可以对应多个ip,一个ip只能绑定一个域名)
TFTP:简单文件传输协议,使用端口号69(使用UDP不可靠传输,但效率高)
HTTP:超文本传输协议,使用端口号80
SNMP:简单网络管理协议,使用端口号161
HTTPS:超文本传输安全协议,使用端口号443(相比于HTTP更安全)
分类:
服务器端使用的端口号:1-1023,表示常规的服务进程
登记端口号:1024-49151,表示没有熟知的服务进程
客户端使用的端口号:49152-65535
协议:
TCP传输控制协议
- 确认号:期望收到下一个对方的报文段的第一个数据字节的序号
- 数据偏移:类似于偏移量,以4字节为单位
- 序号:每一个字节的序号
- 确认ACK:只有当ACK=1时,确认号有效
- 窗口:告诉发送方允许发送的数据量
- 同步SYN:建立时用来同步序号,SYN= 1表示这是一个连接请求或连接接受请求
- 终止FIN:FIN=1,表明报文已发送完毕,要求接收方释放连接
- TCP 虽然是面向字节流,但 TCP 传送的数据单元却是报文段。
- 一个 TCP 报文段分为首部和数据两部分,而 TCP 的全部功能都体现在它首部中各字段的作用。
- TCP 报文段首部的前 20 个字节是固定的,后面有 4n 字节是根据需要而增加的选项(n 是整数)。因此 TCP 首部的最小长度是 20 字节。
套接字:通信两端的端点(IP地址: 端口号)
可靠传输具体实现
1.以字节为单位的滑动窗口
- 现假定 A 收到了 B 发来的确认报文段,其中窗口是 20 字节,而确认号是 31(这表明 B 期望收到的下一个序号是 31,而序号 30为止的数据已经收到了)。
- 根据这两个数据,A 就构造出自己的发送窗口
- 发送方维持的发送窗口,它的意义是:位于发送窗口内的分组都可连续发送出去,而不需要等待对方的确认。这样,信道利用率就提高了。
- 连续 ARQ 协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
2.超时重传ARQ
3.选择确认SACK:接收方接收数据,返回其确认号
特点:
- TCP连接的每一端都必须设置两个窗口——一个发送窗口和一个接收窗口。
- TCP的可靠传输机制用字节的序号进行控制。TCP所有的确认都是基于序号而不是基于报文段。
- TCP两端的四个窗口经常处于动态变化之中。
- TCP连接的往返时间RTT也不是固定不变的。需要使用特定的算法估算较为合理的重传时间。
可靠传输工作原理:
停止等待协议: 发送完一个分组后就停止发送,等待确认后继续。
- 接收方无论是检测分组出现差错还是丢死,均不会响应。 解决办法:自动重传请求ARQ
连续ARQ协议:连续ARQ允许发送方在接收到所有之前数据的确认之前,连续发送多个数据包。这意味着发送方可以维持一个窗口,窗口内的数据包都可以连续发送出去,而不需要等待每一个数据包的单独确认。
流量控制与拥塞控制差异:
拥塞控制:防止过多数据注入网络,导致过载,全局性的
流量控制:点对点通信的控制,端到端的问题
流量控制:
使发送方的的发送速率不要太快,让接收方来得及接受
实现:通过滑动窗口实现,TCP数据的窗口字段数据。为了避免窗口数据丢失,TCP每个连接设有持续计时器(当一方发送完数据后,或者接收完数据后,启动计时器)
拥塞控制:
拥塞是 对资源的需求>可用资源
拥塞控制方式:
1.慢开始:由小到大逐渐增大注入到网络中的数据字节(由小到大增大拥塞窗口)
- cwnd每次增加量 = min(确认报文段所确认的字节数,SMSS发送端最大发送报文数)
- cwnd变化规律为1,2,4,8....
2.拥塞避免:使cwnd缓慢增大(线性增长)
3.快重传:使发送方尽早得知个别报文段的丢失。
- 接收方不等待发送数据才确认,而是立即发送确认,即使收到失序的报文段也要立即发送重复确认
- 发送方一旦收到三个重复确认,就立即重传
4.快恢复:
图示:
运输连接的三个阶段:
建立连接
数据传送
释放连接
建立连接(三次握手)
服务器端进入监听状态,客户端发送连接建立请求报文(SYN报文段,不携带数据。SYN=1,选择一个初始序号seq = x),进入 同步已发送状态。
服务器发送确认报文段(SYN=1,ACK=1,确认号ack = x+1,序号seq为y),进入同步收到状态
客户端发送确认(ACK=1,ack=y+1,seq =x+1 )
客户端为什么需要第三次请求?
为了避免请求连接报文阻塞,服务端延迟一段时间后接受到。使服务端以为已经建立连接,而处于监听状态,浪费资源
释放连接(四次挥手)
客户端发送连接释放报文(FIN=1,sql=u=前面发送最后一个字节序号+1),等待服务端确认。
服务端发出确认(ack=u+1,seq=v=前面发送最后一个字节序号+1)。
- 客户端到服务器方向连接释放,TCP处于半关闭状态。
服务端关闭连接同上
当服务器端发送确认后,进入时间等待状态,经过时间等待计时器 设置的时间2MSL(最长报文段寿命),后释放。为了避免确认丢失和使失效的连接请求报文消失。
UDP用户数据协议
只在IP数据报服务上添加了复用,分用,差错检测的功能(复用是指报文打包发送)