TCP/IP详解卷一: 协议之第1~3章
p1~p37.
第1章概述
分层
- 分层: 链路层(驱动, 网卡), 网络层(IP, ,ICMP, IGMP), 运输层(TCP, UDP), 应用层(HTTP, Talent, FTP, SMTP, SNMP等).
- 下三层一般在内核中执行, 应用层在应用进程中执行
IP的5类地址
A, B, C, D, E5类地址
192.168.1.1(N1.N2.N3.N4)
A类: N1<128
B类: 128<=N1<192
C类: 192<=N1<224
D类: 224<=N1<240
E类: 240<N1<248
看下各网站地址属于什么类型, 如qq.com(125.39.52.26) A类, taobao.com(140.205.94.189) B类.
协议栈
以太网数据帧的长度在46~1500字节. 当主机收到以太网数据帧时, 每层协议会检查首部, 然后去掉首部丢给下层协议解析, 直到应用程序拿到报文内容.
客户-服务端模型
重复型, 代表redis
- 等待一个客户请求的到来
- 处理客户请求
- 发送响应给发送请求的客户
- 返回第1步
并发型, 代表nodejs
- 等待一个客户请求的到来
- 启动一个新的服务来处理这个客户的请求
端口号
- TCP和UDP采用16bit的端口号来识别程序(1~65535)
- 知名端口, 如FTP的TCP端口21, Talent的TCP端口23, TFTP的UDP端口69, 网络服务80.
- 一般1~1023为知名端口, 1024~5000为临时端口, 大于5000为其他服务器预留.
RFC
所有有关Internet的正式标准都以RFC(Request for Comment)文档出版.
第2章 链路层
以太网 vs IEEE 802
2套不兼容的标准, RFC 894和IEEE 802.2/802.3(RFC 1042).
SLIP vs PPP
PPP协议传输效率更高
环回接口(localhost)
参考环回接口
路径MTU
当一个网络上的两台主机通信, 取决通信过程中的最小MTU, 成为路径MTU.
查看本机MTU的命令(windows)
netsh interface ip show interfac
第3章 IP网际协议
IP不可靠(unreliable): 不能保证IP数据报能成功到达目的地.
IP无连接(connectionless): IP不维护任何后续数据报的状态信息. 每个数据包的处理是独立的, 可以不按发送顺序接收.
IP首部
普通IP首部20个字节.
- 4位版本, 目前主要2种, 4和6, 即IPV4和IPV6
- 4位首部长度, 指IP首部32bit的长度, 普通IP是20字节, 所以这个值一般是5(32bit*5 = 20Byte).
- 8位服务类型(TOS), 包括3bit优先权子字段(现在已被忽略), 4bit的TOS子字段, 1bit未用位(必须置0). 4bit的TOS分别代表: 最小时延, 最大吞吐量, 最高可靠性, 最小费用. 4bit只能置1个bit, 所有均为0, 则为一般服务.
- 16位总长度字段, 指的整个IP数据报的长度, 以字节为单位. 利用首部长度和总长度, 就可以知道IP数据报种数据内容的起始位置和长度. 由于是16位, 所有IP数据报最长可达65535字节.
- 16位标识, 标识字段唯一地标识主机发送的每一份数据报. 通常每发送一份报文, 值就加1.
- 3位标志和13位片偏移. 先忽略.
- 8位生存时间(TTL). 该字段设置了数据报可以经过的最多路由器数. TTL初始值由源主机设置(一般128), 一旦经过一个处理它的路由器, 就减1. 当值为0时, 数据报就被丢弃, 并发送ICMP报文通知源主机.
- 8位协议.
- 16位首部检验和. 是根据IP首部计算的检验和码, 不对首部后面的数据进行计算. ICMP, IGMP, UDP和TCP在他们各自的首部中均含有同时覆盖首部和数据的检验和.
发送方计算检验和, 对首部每个16bit进行二进制反码求和, 结果存到检验和字段. 接收方接收IP数据报后, 同样对首部中每个16bit进行二进制反码的求和, 如果结尾全为1, 则检验和通过, 反之, 检验和不通过, IP就丢弃该数据报. 由上层发现数据丢失并重传.
IP路由选择
当收到网络接口来的数据报时, IP首先检查目的IP地址是否为本机地址或者IP广播地址, 如果确实是这样, 就被送到由IP首部协议字段所指定的协议模块处理. 如果不是, 则有2种选择, (1) 如果IP层被设置为路由器功能, 就对数据报进行转发, 否则(2) 数据报被丢弃.
路由表包含:
- 目的IP地址.
- 下一站(或下一跳)路由器的IP地址.
- 标志, 一个标志指明目的IP地址是网络地址还是主机地址, 另一个标志指明下一站路由器是否为真正的下一站路由器.
- 为数据报的传输指定一个网络接口.
子网
由于A类和B类地址为主机号分配了太多地址, 所以产生子网. 如B类的主机号有16位, 一般将前8位划分为子网号, 后8位为主机号.
将网络号和子网号都设置为1, 即为子网掩码, 如常见的255.255.255.0. 子网掩码判断是否属于同一子网.