物理层/链路层/网络层/运输层/应用层 IP网络层是层三
IP地址
A类: 0 7位网络号 24位主机号
B类: 10 14位网络号 16位主机号
C类:110 21位网络号 8位主机号
IP网络包 46-1500 就是包括IP头+UDP头
网络字节序是大头 BIG ENDIAN 20字节IP头
IP头里的长度字段 可以小于46字节.
首部检验和 是根据IP首部计算的检验和码, 它不对首部后面的数据进行计算.
子网把 主机号再分成一个子网号+主机号
与30个C类地址相比, 用一个包含30个子网的B类地址的好处是, 它可以缩小路由表的规模. 因为路由表变树形了, 不同局域网里面的路由器的路由表可以变很小, 管自己子网里面就行了.
ARP是 如果没有MAC地址写到头上去, 那么就要发这个ARP报文, 让其他主机把MAC地址发过来. ARP会超时.
链路头是14个字节长度.
PING就是ICMP echo
IP选路:
route
netstat -rn
G标志是间接路由: IP不是路由器地址, MAC地址是路由器地址
没有G标志是直接路由: IP和MAC都是路由器地址
U: 该路由可以使用
H: 网络地址, 匹配网络号子网号就行了
没有H: 子网地址, 主机号也要匹配
default: 没有找到路由, 就用这个路由选项
IP头20字节
版本, 首部长度, TOS, 总长度, 标识, 标志, 分片偏移, TTL, 协议号, 检验和, IP源地址, 目的地址
UDP头 8字节
2字节源端口号
目的端口号
2字节UDP长度
2字节UDP检验和
UDP检验和可选
伪首部 12字节 IP源,目的, +4字节
IP检验和只检查IP首部, UDP检验伪首部+数据
IP分片: 只有UDP才分
包括IP头 >1500就要分片
所以1472就要分片 + 20(IP头) + 8(UDP头)
第二个分片的时候 就不需要填写UDP头了 所以第二个分片1480分片 + 20(IP头)
TCP提供一种面向连接的, 可靠的字节流服务
TCP首部20字节
源,目的端口号
序号, 确认序号 ..
检验和覆盖了整个TCP报文段: TCP首部+TCP数据
ACK序号是接收序号+1 这个值就是对端下一个要发包的头字节
建立一个连接需要3次握手
client:SYN
server:SYN-ACK
client:ACK
终止一个连接需要4次握手 half-close半关闭状态
client:FIN
server:FIN_ACK
server:FIN
client:FIN_ACK
MSS, TCP中的最大报文段长度, 即每一个包都用这个长度发送数据
TCP成块数据流流控: 滑动窗口协议
win长度位0, 即TCP rcv_buf长度不够, 缓存不了包了, 对端就不能发了
TCP的超时与重传:
ack一直反复这个过来, 直到你传回来
慢启动(slow start)
拥塞控制算法
congestion window拥塞窗口:cwnd