TCP/IP

物理层/链路层/网络层/运输层/应用层    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

 


 

你可能感兴趣的:(c,算法,tcp,网络,server,路由器)