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. 等待一个客户请求的到来
  2. 处理客户请求
  3. 发送响应给发送请求的客户
  4. 返回第1步

并发型, 代表nodejs

  1. 等待一个客户请求的到来
  2. 启动一个新的服务来处理这个客户的请求

端口号

  • 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个字节.

  1. 4位版本, 目前主要2种, 4和6, 即IPV4和IPV6
  2. 4位首部长度, 指IP首部32bit的长度, 普通IP是20字节, 所以这个值一般是5(32bit*5 = 20Byte).
  3. 8位服务类型(TOS), 包括3bit优先权子字段(现在已被忽略), 4bit的TOS子字段, 1bit未用位(必须置0). 4bit的TOS分别代表: 最小时延, 最大吞吐量, 最高可靠性, 最小费用. 4bit只能置1个bit, 所有均为0, 则为一般服务.
  4. 16位总长度字段, 指的整个IP数据报的长度, 以字节为单位. 利用首部长度和总长度, 就可以知道IP数据报种数据内容的起始位置和长度. 由于是16位, 所有IP数据报最长可达65535字节.
  5. 16位标识, 标识字段唯一地标识主机发送的每一份数据报. 通常每发送一份报文, 值就加1.
  6. 3位标志和13位片偏移. 先忽略.
  7. 8位生存时间(TTL). 该字段设置了数据报可以经过的最多路由器数. TTL初始值由源主机设置(一般128), 一旦经过一个处理它的路由器, 就减1. 当值为0时, 数据报就被丢弃, 并发送ICMP报文通知源主机.
  8. 8位协议.
  9. 16位首部检验和. 是根据IP首部计算的检验和码, 不对首部后面的数据进行计算. ICMP, IGMP, UDP和TCP在他们各自的首部中均含有同时覆盖首部和数据的检验和.
    发送方计算检验和, 对首部每个16bit进行二进制反码求和, 结果存到检验和字段. 接收方接收IP数据报后, 同样对首部中每个16bit进行二进制反码的求和, 如果结尾全为1, 则检验和通过, 反之, 检验和不通过, IP就丢弃该数据报. 由上层发现数据丢失并重传.

IP路由选择

当收到网络接口来的数据报时, IP首先检查目的IP地址是否为本机地址或者IP广播地址, 如果确实是这样, 就被送到由IP首部协议字段所指定的协议模块处理. 如果不是, 则有2种选择, (1) 如果IP层被设置为路由器功能, 就对数据报进行转发, 否则(2) 数据报被丢弃.

路由表包含:

  1. 目的IP地址.
  2. 下一站(或下一跳)路由器的IP地址.
  3. 标志, 一个标志指明目的IP地址是网络地址还是主机地址, 另一个标志指明下一站路由器是否为真正的下一站路由器.
  4. 为数据报的传输指定一个网络接口.

子网

由于A类和B类地址为主机号分配了太多地址, 所以产生子网. 如B类的主机号有16位, 一般将前8位划分为子网号, 后8位为主机号.
将网络号和子网号都设置为1, 即为子网掩码, 如常见的255.255.255.0. 子网掩码判断是否属于同一子网.

原文地址:https://www.cnblogs.com/winwink/p/TCPIP_Note_Part1_1-3.html