tcp相关

网卡:计算机连入网络必备设备
中继器、集线器:物理层设备,电信号在介质中传递会随传输距离增加而衰减,中继器用来将衰减的信号放大还原,从而在物理层上延长传输距离。中继器不验证数据是否正确,只是传递数据。
网桥、交换集线器:在数据链路层连接两个网络的设备,网桥会通过fcs验证数据完整性
路由器:在网络层上连接两个网络,进行数据的分组转发
网关:将传输层~应用层的数据进行传递、对不同协议之间的数据进行转换,还可以进行负载均衡。
半双工通信:接收数据、发送数据只能同时发生一个。
全双工通信:接收数据、发送数据可以同时进行
子网掩码:网络地址全为1,主机地址全为0,
私有网络地址: 10.0.0.0—10.255.255.255 A类
172.16.0.0—172.31.255.255 B类
192.168.0.0—192.168.255.255 C类
私有地址只需要在同一域内保持唯一、不需要全局唯一
路径MTU:避免传输层的数据包在网络层传输时分片,传输数据如果超过数据大小限制,路由器会返回icmp数据,并携带mtu大小,来限制传输数据的大小。
主机地址全0表示网络地址,全1表示广播地址。
ipv4首部:0–3 版本
4–7 首部长度,表明ip首部大小,
8–15 区分服务,
16–31 总长度,表示ip包最大65535字节(首部+数据)
0–15 标识,用于分片重组,同一个包分片的标识相同
16–18 标志
19–31 片偏移,标识分片相对于数据包的位置,单位8字节,一共13位,可表示8*2^13=65536字节的位置。
0–7 生存时间
8–15 协议
16–31 首部校验和
0–31 源地址
0–31 目标地址

ip协议相关

  1. ARP协议:网络层协议,用来获取主机MAC地址。主机广播发送数据包,接收到包的主机对比目的ip是否与自己的ip相同,相同则将MAC地址返回。
  2. RARP协议:设备向RARP服务器发送包含自身MAC地址的数据,来获取自己的ip地址
  3. ICMP协议:确认ip包是否发送成功、获得ip包发送失败的原因。
    ip包有最大生存时间,当ip包过期时,路由器会发送ICMP包告知源主机。
    ping命令通过主机间发送接收ICMP包实现,确认主机间是否连通
  4. DHCP:用于向主机分配ip地址,需要架设DHCP服务器。
  5. NAT:用于将本地网络中的私有ip地址转为连接互联网时的全局ip地址。ip转换表是在NAT路由器上自动生成的,路由表随着TCP连接建立时发送SYN包发出后建立,关闭连接时发送FIN包删除。NAT的缺陷:只能由内部向外部建立连接;转换表生成删除需要额外开销;NAT遇到异常重启后,TCP连接会重置。
  6. IP隧道:让使用ipv4和ipv6的网络之间可以互相通信。例如ipv6的网络向ipv4的网络发送数据包,会将ip数据包添加一个ipv4的首部

TCP与UDP

  1. 传输层连接通过一个五元组标识一条连接:源ip,源端口,目的ip,目的端口,协议
  2. TCP是面向连接、可靠的流协议
  3. TCP通过序列号与确认应答机制保证可靠性,主机接收数据后会发送确认包,来表明已接收到数据。如果发送数据的主机在一段时间内未收到对方的确认,会重发数据包。序列号表明已接收到哪些数据、下次需要接收哪些数据,对于重复数据可以识别并抛弃。
  4. UDP是不可靠的传输协议,不保证消息一定到达。如果想保证可靠性,需要在上层应用中控制。常用于即时通信
  5. 常用协议端口号:FTP(TCP21)、SSH(TCP22)、SMTP(TCP25)、HTTP(TCP80)、DNS(TCP53、UDP53)
  6. TCP建立连接时会确定MSS(最大消息长度),发送SYN包时双方会互相通知对方自己设置的MSS大小,最终会选择两者之间的较小值作为MSS。
  7. TCP发送数据时会批量发送数据,通过滑动窗口来确保哪些数据已经被对方接收,哪些数据已发送但还没有收到确认,哪些数据还没有发送,并通过滑动窗口的大小来限制数据传输速度
  8. 通过累计确认机制,接收方收到数据后即使未发送确认包,只要之后发送了数据的确认包,之前的数据都会被确认。
  9. 接收端未收到发送的数据,会返回对之前数据的确认,发送端累计接收到3次重复的确认包,就会重发丢失的数据。
  10. 接收端会向发送端发送当前窗口的大小,来限制发送端发送数据的速度。为了避免接收端发送的确认包丢失而导致的窗口大小无法更新的问题,发送端会每隔一段时间发送一个窗口探测报文, 来获取接收端窗口的最新状态。

拥塞控制

  1. 慢启动:为了避免在在通信开始时发送大量数据导致整个网络发生拥堵,tcp在通信开始时会通过慢启动算法对发送速度进行控制。发送端定义了一个拥塞窗口,大小为1MSS,之后每收到一个确认包,拥塞窗口的值+1。发送数据时会将接收端传来的窗口大小和发送端拥塞窗口大小进行对比,取较小值进行发送包的大小。在超时重传时设置慢启动阈值为拥塞窗口的一半,拥塞窗口置为1。当拥塞窗口大小到达慢启动阈值时,拥塞窗口会线性增加,直到发生重复确认后,慢启动阈值变为当前拥塞窗口的一半,拥塞窗口置为慢启动阈值+3,继续发送数据。

UDP首部

  1. 源端口:16位,可以不设置(用于不需要返回数据的通信)
  2. 目的端口:16位
  3. 包长度:udp首部和数据长度和,字节为单位。
  4. 校验和:

TCP首部

  1. 源端口:16位
  2. 目的端口:16位
  3. 序列号:32位,发送数据的位置,每发送一次数据,该值会增加发送数据的长度。序列号初始值是建立连接时生成的随机数,建立或断开连接时发送的SYN、FIN包也会作为1个字节增加到序列号上。
  4. 确认应答号:32位,期望下一次接收到的数据的序列号,也说明当前确认号之前的数据已成功接收。
  5. 数据偏移:4位,单位4字节。tcp首部的长度,tcp数据部分的开始。
  6. 保留:4位,扩展时使用
  7. 控制位:8位,
  8. 窗口大小:16位,用于控制发送数据大小,
  9. 检验和
  10. 紧急指针:16位

你可能感兴趣的:(tcp相关)