运输层(segment)
- 用户数据报协议UDP(User Datagram Protocol)
- 传输控制协议TCP(Transmission Control Protocol)
UDP
- 无连接
- 不可靠交付
- 面向报文
- 支持一对一、一对多、多对一和多对多的交互通信
- 首部开销小
TCP
- 面向连接
- 可靠交付
- 面向字节流
- 一对一全双工通信
进程间通信
- TCP连接::={socket1,socket2}={(IP1:port1),(IP2:port2)}
端口(port number)
- 客户端->临时端口号
- 服务器->知名服务端口号(/etc/services)
应用层协议 | 运输层协议 | 端口 |
---|---|---|
DNS | UDP | 53 |
FTP | TCP | 21/20 |
SSH | TCP | 22 |
HTTP | TCP | 80 |
HTTPS | TCP | 443 |
SMTP | TCP | 25 |
DHCP | UDP |
序号(sequence number)
- A->B,A发送数据->B
- ISN(Initial Sequence Number,初始序号值)+offset
确认号(acknowledgement number)
- A->B,A确认接收<-B
- 接收的TCP报文段的序号值+1
标志位(TCP flags)
- ACK(确认报文段)
- SYN(同步报文段)
- FIN(结束报文段)
窗口(windows size)
- 接收通告窗口(Receiver Window,RWND)
校验和(checksum)
- CRC(首部+数据)
TCP可靠传输
TCP超时重传
- RTO(Retransmission Timeout,重传超时时间)
- RTT(Round Trip Time)->重传的多义性问题
- Karn算法
- 新RTO=2*旧RTO(重传)
- base(RTO,RTT)(未重传)
TCP滑动窗口
TCP流量控制
TCP拥塞控制
- 发送方维持一个叫作拥塞窗口cwnd(congestion windows)的状态变量
- 慢开始门限ssthresh状态变量
慢开始(slow-start)
- cwnd < ssthresh
- 发送方每收到一个确认就把窗口cwnd+1个最大报文段的MSS的数值
- 指数规律增长
拥塞避免(congestion avoidance)
- cwnd > ssthresh
- 线性规律增长
快重传(fast retransmit)
- 让发送方尽早知道发生了个别报文段的丢失
快恢复(fast recovery)
- 从连续收到3个重复的确认转入拥塞避免
TCP运输连接管理
为什么建连接要3次握手
- 全双工
- ISN
- SYN-ACK
- 防止已失效的连接请求报文段
为什么断连接要4次挥手
- 全双工
- FIN-ACK
半关闭状态(FIN_WAIT_2)
2MSL等待状态(TIME_WAIT)
- 最长报文段寿命MSL(Maximum Segment Lifetime)
- 防止最后一次握手的数据报没有传送到对方那里而准备的
- 防止已失效的连接请求报文段
网络编程
网络字节序与主机序
CPU->主机序
- C/C++->CPU
- Java->Big Ending
- 网络协议->Big Ending->网络字节序
网友评论