文章目录
1. 链路层
作用:
- 为IP模块发送和接收IP数据报
- 为ARP模块发送ARP请求和接收ARP应答
- 为RARP模块发送RARP请求和接收RARP应答
2. IP 网络协议
不可靠:不保证数据报能成功到达目的地
无连接:不维护任何关于后续数据报的状态信息
子网掩码来 识别 子网号和主机号
ifconfig
netstat -in
2.1 ARP 地址解析协议
32bit的IP地址-> 48bit以太网地址
2.2 RARP
ARP的反过程
2.3 ICMP Internet控制报文协议
2.3.1 Ping
2.3.2 traceroute
开始发送一个TTL字段为1的UDP数据报,然后将TTL字段每次加1,以确定路径中的每个路由器。
$ traceroute www.baidu.com
traceroute: Warning: www.baidu.com has multiple addresses; using 182.61.200.7
traceroute to www.a.shifen.com (182.61.200.7), 64 hops max, 52 byte packets
1 192.168.1.1 (192.168.1.1) 1.447 ms 1.190 ms 1.688 ms
2 100.108.128.1 (100.108.128.1) 2.451 ms 2.520 ms 2.347 ms
3 59.108.145.214 (59.108.145.214) 3.246 ms
59.108.153.65 (59.108.153.65) 2.763 ms
59.108.161.213 (59.108.161.213) 3.219 ms
4 * * *
5 172.16.237.45 (172.16.237.45) 5.498 ms 3.297 ms 5.129 ms
6 * 59.108.167.233 (59.108.167.233) 30.626 ms 3.866 ms
7 59.108.200.66 (59.108.200.66) 5.731 ms
59.108.162.102 (59.108.162.102) 17.101 ms
59.108.200.66 (59.108.200.66) 6.037 ms
8 182.61.252.212 (182.61.252.212) 9.695 ms 9.701 ms
182.61.252.220 (182.61.252.220) 4.730 ms
9 * * *
2.4 IP路由
简单路由表
netstat -rn
$ netstat -rn
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.1.1 UGSc 22 55 en0
127 127.0.0.1 UCS 0 0 lo0
127.0.0.1 127.0.0.1 UH 6 15493696 lo0
169.254 link#4 UCS 0 0 en0
192.168.1 link#4 UCS 1 0 en0
192.168.1.1/32 link#4 UCS 1 0 en0
Internet6:
Destination Gateway Flags Netif Expire
default fe80::%utun0 UGcI utun0
::1 ::1 UHL lo0
fe80::%lo0/64 fe80::1%lo0 UcI lo0
fe80::1%lo0 link#1 UHLI lo0
fe80::%en0/64 link#4 UCI en0
动态选路协议
3. UDP
3.1 广播和多播
受限的广播地址 255.255.255.255
3.2 IGMP Internet组管理协议
3.3 DNS 域名系统
域名到IP
4. TCP 传输控制协议
URG: Urgent Pointer field significant
ACK: Acknowledgment field significant
PSH: Push Function
RST: Reset the connection
SYN: Synchronize sequence numbers
FIN: No more data from sender
4.1 TCP服务
TCP 的可靠性含义: 接收方收到的数据是完整, 有序, 无差错的。
提供可靠性:
- 控制数据报大小:应用数据被分割成TCP认为最适合发送的数据块。
- 超时重传:当TCP发出一个段后,启动定时器,等待目的端收到这个报文段后的确认,超时重传。
- 延迟确认:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。延迟确认。
- 正确性校验:TCP将保持它首部和数据的校验和。
- 保证顺序:可能对收到的数据进行重新排序。
- 去重:丢弃重复的数据。
- 流量控制:有固定大小的缓冲空间。
问题5 可以回答,每一条都会展开详细分析。
4.1.1 TCP连接状态图
Maximum Segment Lifetime (MSL)
netstat命令查看状态
4.1.2 三次握手
4.1.3 四次挥手
4.2 TCP交互数据流
延迟确认
TCP接收到数据时并不立即发送ACK,推迟发送,数据捎带ACK
Nagle算法
要求一个TCP连接上最多只能有一个未被确认的未完成的小分组(41字节,20字节IP首部,20字节TCP首部和1个字节数据)。
4.3 TCP成块数据流
滑动窗口
控制ACK的节奏。
push
慢启动
拥塞窗口(congestion window):发送方使用的拥塞控制。1->2->4
5. 常见面试题
-
详细描述 三次握手 和 四次挥手的机制,画出状态图?
答:4.1已经回答。 -
1的引申,为什么是三次握手?
答: TCP是全双工的面向连接、可靠的通信协议。
我们先来看 三次握手 做了什么。- client、server建立了连接
- client、server交换了 初始 seq 序列号>。 序列号可以保证报文顺序、不重、不丢。
如果是一次的话,无法保证请求建立连接报文一定到达。
如果是两次的话,无法确保S第二个请求YN+ACK一定到达。
-
1的引申,为什么是四次挥手?
答:TCP是全双工的通信。 -
四次挥手中TIME_WAIT状态存在的目的是什么?这个问题还可以延伸,所以学知识需要多思考。
答:TIME_WAIT也称2MSL等待状态。当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2倍MSL。 这样可以让TCP再次发送最后的ACK以防这个ACK丢失。(另一端超时并重发最后的FIN)。 -
TCP是通过什么机制保障可靠性的?
其他资料:
https://www.ietf.org/rfc/rfc793.txt
https://www.zhihu.com/question/24853633