tcp/ip 卷一 读书笔记(1)tcp/ip 概述

时间:2022-07-20 10:15:03

TCP/IP协议概述

术语

广域网 WAN

局域网 LAN

TCP/IP四层网络模型

TCP/IP通常被认为是一个四层协议系统

  • 网络接口层 包括arp,rarp协议,包括操作系统中的网卡驱动程序和对应的网络接口卡,一起处理数据在电缆之间传输的细节,这一层是同一个链路网络内,不同接口之间通过mac地址通信。arp协议是根据ip地址,请求对应的mac地址,rarp协议是根据mac地址,请求ip地址(可以用来做开机获取ip地址,实际现在已经不这么做了),二层的典型设备是交换机,交换机内有一张mac地址和对应的端口规则的表,每当收到一个包,如果是arp广播包,那么就将这个包从这个交换机的所有接口(这里不考虑vlan先),如果不是广播包,交换机根据目的mac地址来匹配应该将数据转发往哪个端口,然后从对应的端口扔出去。网桥是低端版的交换机,也有类似的功能,可以在链路层上对网络进行互联,linux bridge就是虚拟的网桥。交换机和网桥隔离冲突域。
  • 网络层 包括IP,ICMP,IGMP协议,ip地址和路由设备,都是网络层的概念,链路层的通信,只能在一个或者多个交换机连接的网络内,其实算是同一个网络,里面的机器mac地址不能冲突,一个arp包,所有的机器都能收到,所以我们即使不考虑代价的问题,我们也不会把全世界所有的机器都直接接到,一个这样的网络内(wan),我们需要会把自己的网络,链路层上同外界的网络隔离,通过路由设备和他们通信,这样好处多多,后面再分析。路由设备是网络层的设备,它存储ip地址和对应的接口的对应关系,通过路由选择协议,根据目的ip地址选择下一跳的ip地址(也会是个路由设备或者虚拟路由设备或者目的地址),通过arp协议获取到下一跳的mac地址,修改数据包,将目的mac地址设置成这个地址,扔给链路层,由链路层送出。路由器隔离广播域。(笔记五中更详细的介绍了通信过程,以及为什么路由器隔离广播域)
  • 传输层 包括tcp协议,udp协议。网络层的传输主要是一个ip+端口号,将数据发送给另一个ip+端口号,这个端口号,是用来区分不同的应用程序,告诉操作系统,这个包是发给那个程序的,该扔到哪个缓存里面,由哪个程序负责读出。udp是不可靠的传输,不理会传输的过程中是否发生丢包,通常主机内的通讯都使用udp,主机间的通信,如果使用udp,需要自己做好传输可靠性的检验。tcp的设计思想是尽可能可靠的传输,保证数据已定能传输到,尽量避免拥堵,所以tcp设计不是为了占据更多的带宽而设计的,多个链接可以提高传输速度,tcp的设计在网络速度越来越快的情况下,暴漏出很多缺陷,后面再谈。
  • 应用层,各种应用工作的层次

还可以看OSI七层网络模型

互联网的地址

网络地址分类,IPV4的情况,IP地址分为A,B,C,D,E五类,各自所处的范围如下:

类别 格式 最大网络数 IP地址范围 私有地址范围
A 0[7b netNum][24b hostNumber] 126(2^7-2) 0.0.0.0-127.255.255.255 10.0.0.0-10.255.255.255
B 10[14b netNum][16b hostNumber] 16382(2^14-2) 128.0.0.0--191.255.255.255 172.16.0.0-172.31.255.255
C 110[22b netNum][8b hostNumber] 2097150(2^21-2) 192.0.0.0-223.255.255.255 192.168.0.0-192.168.255.255
D 1110[28b multcast number] N/A 224.0.0.0-239.255.255.255 N/A
E 11110[27b reserved number] N/A 240.0.0.0-255.255.255.255 N/A

最大网络数-2是因为全0和全1的网络号(netnum)是非法的。

D类地址是多播地址,E类是预留地址。

私有地址是非Internet网络使用的地址,公网上的路由器不会转发目的地址是私有地址的数据

无类别域间路由

A,B,C等分类地址的划分是最初的设计,后来人们遇到这样的问题

In the early 1990s, after the adoption of subnet addressing to ease one form of growing pains, the Internet started facing a serious set of scaling problems. Three particular issues were considered so important as to require immediate attention:

  1. By 1994, over half of all class B addresses had already been allocated. It was expected that the class B address space would be exhausted by about 1995.
  2. The 32-bit IPv4 address was thought to be inadequate to handle the size of the Internet anticipated by the early 2000s.
  3. The number of entries in the global routing table (one per network number), about 65,000 in 1995, was growing. As more and more class A, B, and C routing entries appeared, routing performance would suffer.

为了解决这些问题,现在我们引入了无类别域间路由的概念,使用cidr的方式,用网络地址加上掩码来表示一个网络,如

172.16.40.128/25,10.0.0.25/32. cidr的本质在于,使用掩码分割网络,表示网络的范围,而不是根据网络类型。cidr的好处在于,提高网络地址的利用率,分配一个网络,可以只分配,2个,4个,8个,16个...地址,而不是256,255256,256256*256。

cidr技术减缓了ipv4地址耗尽的趋势,类似的还有nat技术,nat技术工作在路由设备上,传输层,可以让很多用户共用一个公网ip地址,而不是所有人都接入到Internet中,也起到减缓ipv4地址消耗的作用。

关于cidr和nat,可以看:协议森林14 逆袭 (CIDR与NAT)

cidr同时还能够支持路由汇聚的功能,减少互联网上的路由表项的数目,以解决引用中提到的第三个问题,可以看 cidr_*

各种数据报的格式

tcp的数据包:

link header ip Header tcp Header data link trailer
14bit 20bit 20bit 不固定 4bit

udp的数据包:

link header ip Header tcp Header data link trailer
14bit 20bit 8bit 不固定 4bit

icmp和igmp数据包,主要在ip header中的协议值区分:

link header ip Header data link trailer
14bit 20bit 不固定 4bit

arp和rarp数据包,主要在以太网首部中的的帧类型区分:

link header data link trailer
14bit 不固定 4bit

各种去掉link header和link trailer之外的数据,最大有一个长度,超过这个长度的数据交给链路层,链路层会不处理这个数据,会直接丢弃。

这个最大长度我们称为mtu,ip层交给link层的数据长度一定要小于等于MTU值。

在tcp中,还有mss值得概念,指上图tcp数据包中的data的大小,后面再谈。

参考:

TCP/IP详解 卷一
TCP/IP详解 卷二