TCP/IP读书笔记

第一章 概述
1 TCP/IP的分层
链路层:物理接口、ARP、RARP
网络层:IP、ICMP、IGMP
运输层:TCP和UDP
应用层:应用程序

2 五类IP地址
共32bit
A类地址 起始字段0----- 网络号7bit---- 主机号24bit 范围 0.0.0.0-127.255.255.255
B类地址 起始字段10---- 网络号14bit--- 主机号16bit 范围128.0.0.0-191.255.255.255
C类地址 起始字段110--- 网络号21bit--- 主机号8bit 范围192.0.0.0-223.255.255.255
D类地址 起始字段1110-- 多播组号28bit              范围224.0.0.0-239.255.255.255
E类地址 起始字段11110- 留待后用27bit              范围240.0.0.0-247.255.255.255

第二章 链路层
1 链路层的三个目的
1)为IP模块发送和接收IP数据报;
2)为ARP模块发送ARP请求和接收ARP应答;
3)为RARP发送RARP请求和接收RARP应答。

2 CSMA/CD
带冲突检测的载波侦听多路接入
Carrier Sense, Multiple Acess with Collision Detection

3 以太网帧格式(头部14byte)
目的地址(6byte)-源地址(6byte)-类型(2byte)-数据(46-1500byte)-CRC(4byte)
IP                                类型(0800) -IP数据(46-1500byte)
ARP                               类型(0806) -ARP数据(28)-PAD(18)
RARP                              类型(0835) -RARP数据(28)-PAD(18)

4 SLIP(Serial Line IP)
链路层协议,是一种对IP的简单封装(和以太网帧无关),和IP包的不同之处有
1)以END(0xc0)开头和结束
2)用(0xdb 0xdc)取代报文中的(0xc0)
3)用(0xdb 0xdd)取代报文中的(0xdb)
缺点
1)每一端必须知道对方IP
2)数据帧没有类型字段(比如线路只能用于SLIP)
3)没有CRC
CSLIP 压缩的SLIP

5 PPP点对点协议
PPP修正了SLIP的缺陷,其包括:
1)串行链路IP封包,支持校验,异步和同步模式;
2)建立、配置及测试数据链路控制协议(LCP:Link Control Protocol);
3)针对不同网络的网络控制协议(NCP:Network Control Protocol)

PPP帧格式
标志(7E)-地址(FF)-控制(03)-协议(2byte)-信息(小于1500byte)-CRC(2byte)-标志(7E)
IP                              -协议(0021)-IP数据报文
LCP                             -协议(C021)-LCP内容
NCP                             -协议(8021)-NCP内容

6 PPP比SLIP的优点
1)单链路多协议
2)有CRC校验
3)使用NCP可以进行动态IP协商
4)支持压缩
5)可以用ICP对多个链路进行配置

7 环回接口
localhost 127.0.0.1
1)环回地址任何数据均作为IP输入
2)传给广播地址或多播地址复制一份给回环
3)任何传给该地址的IP数据均送到回环接口(指本机发送IP给本机)

第三章 IP:网际协议
1 IP首部共20byte (大印第安序)
4byte 版本(4bit)-首部长度(4bit)-服务类型TOS(8bit)-总长度字节数(16bit)
8byte 标识(16bit)-标志(3bit)-偏移(13bit)
12byte 生存时间TTL(8bit)-协议(8bit)-首部校验和(16bit)
16byte 源IP的地址(32bit)
20byte 目的IP地址(32bit)
后面是可选内容,依然以32bit对齐,首部最长60byte

2 IP首部部分内容解释
TOS 现在基本不用
长度 最大为65535
标识 通常每发送一次报文加1
TTL 经过多少路由器后被丢弃
首部校验和 仅计算首部的校验和信息

3 路由表包含信息
1)目的IP地址
2)下一跳路由IP地址,或直连机器的IP
3)标志,标明目的IP是机器或网络,下一跳是路由还是直连机器
4)数据包的网络接口

4 IP路由选择的功能
1)搜索路由表,找完全匹配目的IP的表项,发给下一跳
2)搜索路由表,找网络号匹配的表项,发给下一跳
3)搜索路由表,寻找默认表项,发给下一跳

5 子网寻址的好处:缩小Internet路由表的规模

6 子网掩码,32bit,1留给网络和子网号,0留给主机号
根据IP地址和子网掩码,可以确定IP数据包的目的:
1)本子网的主机
2)本网络中其他子网的主机
3)其他网络的主机

第四章 ARP:地址解析协议
1 ARP协议格式(28byte)
硬件类型(2)-协议类型(2)-硬件地址长度(1)-协议地址长度(1)-操作(2)-发送方硬件地址(6)-发送方IP地址(4)-目的硬件地址(6)-目的IP地址(4)

操作:ARP请求(1)、ARP应答(2)、RARP请求(3)、RARP应答(4)

2 ARP请求的应答过程(ARP是广播的)
ARP请求将除了目的端硬件地址外所有字段填充完整。系统受到ARP请求后,填入自己硬件地址,将操作字段改为2(ARP应答),再交换目的和发送地址,将其发送回去。

第六章 ICMP:internet控制报文协议
1 ICMP报文格式
类型(8bit)-代码(8bit)-校验和(16bit)-其他主要内容

2 ICMP分类
查询报文 可能会导致产生差错报文
差错报文 永远不会再产生新的差错报文

3 不会产生ICMP差错报文的情况(防止广播风暴)
1)ICMP差错报文
2)目的地址为广播地址
3)链路层广播数据报
4)不是IP的第一片
5)源地址不是单个主机的数据报

4 ICMP的主要功能
1)获取子网掩码
2)获取时间戳
3)端口不可达差错
4)

5 ICMP差错的规定
必须包含生成该差错报文的数据报IP首部,还必须包含至少IP首部后面的前8个字节


第九章 IP选路
1 ICMP重定向
接受者必须查看三个地址:
1)导致重定向的IP
2)发送重定向报文的路由器的IP
3)应采用的路由器的IP
其他规则
1)重定向报文只能由路由器产生,不能由主机产生
2)重定向报文是为主机而不是为路由器使用的
3)路由器发送的是针对主机的重定向报文,不是针对网络的报文

2 IP路由表项内容
5bit标志
目的IP地址(主机、网络或默认)
下一站路由表的IP地址(间接路由)或者本地接口的IP地址(直接路由)
指向本地接口的指针

第十章 动态选路协议
1 一些名词
IGP 内部网关协议(Interior Gateway Protocol)
RIP 选路信息协议(Routing Information Protocol)
OSPF 开发最短路径优先(Open Shortest Path First)
BFP 边界网关协议(Board Gateway Protocol)
CIDR 无类型域间选路(Classless Inter Domain Routing)

2 RIP
RIP包含在UDP数据报中
RIP主要用来报告网络上的路由及对应的跳数
距离状态协议

3 OSPF
直接使用IP
链路状态协议
比RIP收敛快(网络改变后稳定快)
相对RIP优点有多个。。省略

4 BGP
使用TCP作为载体,需要建立TCP链接。
不同自治系统的路由器之间进行通讯的外部网关协议。和IGP相对。

第11章 UDP:用户数据报协议
1 UDP首部格式
源端口号(16bit)-目的端口号(16bit)-UDP长度(16bit)-UDP检验和(16bit)-数据

2 UDP检验和
UDP检验包含UDP首部和UDP数据
IP首部检验和仅覆盖IP首部

UDP和TCP在计算检验和时都包含一个伪首部(12byte)
源IP地址(32bit)-目的IP地址(32bit)-0(8bit)-协议(8bit)-长度(16bit)
UDP长度可以是奇数,计算检验和时需要用0补充到16bit对齐

如果UDP校验和出错,UDP数据报被丢弃,不产生任何差错报文。IP层检测首部校验和也这样做。

3 IP分片
未分片IP,标识符唯一。分配后IP具有相同标识符。
标志位除了最后一片,其他将“更多的片”位置位。
偏移字段记录偏移位置。
分片过程中,协议名被复制到IP首部,每片都可以获取,但端口号只存在于第一片IP数据报中。

4 最大报文长度
IP数据报最大长度65535,由16bit IP首部长度字段所限
UDP去掉IP首部和UDP首部,数据最多65507字节


第12章 广播和多播

广播和多播仅应用于UDP
广播:主机向网上所有的主机发送帧
多播:帧仅传送给属于多播的多个主机
多播地址:以太网地址最高字节的最低位被设置为1(01:00:00:00:00:00)

2 广播
受限的广播:255.255.255.255 用于主机配置,路由器不转发,通常在系统启动时才会用
指向网络的广播:主机号全为1的地址 netid.255.255.255 是一个指向A网络的广播地址
指向子网的广播:主机号全为1,有特定的子网号(要根据子网掩码判断)
指向所有子网的广播:子网号和网络号全为1的地址(有点过时)

3 多播(D类地址)
多播提供两类服务
1)向多个目的地址传送数据
2)客户对服务器的请求
多播组是需要主机加入的

4 多播地址到以太网地址的转换
只需将IP多播地址的低位23bit放到多播地址01:00:5E:00:00:00的低23bit上。


第13章 IGMP:internet组管理协
1 IGMP报文
版本(4bit)-类型(4bit)-未用(8bit)-校验和(16bit)-D类多播地址(32bit)
IGMP包括查询和报告两类

2 IGMP规则
1)第一个进程加入一个组时,主机发送一个IGMP报告
2)进程离开组时,主机不发送IGMP报告
3)多播路由器定时发送IGMP查询来了解是否还有主机包含有属于多播的进程
4)主机通过IGMP报告来响应一个IGMP查询
使用这些查询和报告报文,多播路由器对每个接口保持一个表,表中记录接口上至少还包含一个主机的多播组。当路由器收到需要转发的多播数据报时,只将其转发到属于那个组主机的接口上。

第14章 DNS:域名系统
1 DNS域名三部分
1)顶级域(特殊域)
2)普通域
3)国家域

2 DNS查询的返回结果
1)返回结果中包含查询的问题
2)返回结果中包含重复的内容,采用压缩方式。

3 DNS的优化方法
1)指向域名的指针(减少报文的长度)
2)查询结果的高速缓存
3)in-addr.arpa域(查询IP地址对应的域名)
4)放回的附加资源记录(防止主机重发同一查询请求)

第15章 TFTP:简单文件传输协议
1 TFTP的端口
TFTP协议基于UDP
TFTP服务器进程在69端口同时对多个客户程序进行文件传输。当服务器进行收到新的传输请求后,改用一个新的端口,与特定客户进程进行数据交换。

第16章 BOOTP:引导程序协议
1 BOOTP的端口
BOOTP协议基于UDP
BOOT服务器端口67 客户端端口68
使用两个端口的原因:服务器的应答可以进行广播

2 BOOTP服务可以过路由器
RARP的缺点是一个链路层协议,一般不可以被路由器转发。
BOOTP可以被路由器转发,过路由器时,路由器填充网关IP地址,同时将TTL加1。


第17章 TCP:传输控制协议
1 TCP提供一种面向连接的可靠的字节流服务。
TCP保证可靠性的方法
1)应用数据被分割成TCP认为最适合发送的数据块。
TCP传递给IP的信息单位称为报文段(segment)。
2)TCP发出一个段后,启动一个定时器,等待目的端确认收到这个报文段。如果收不到则重发。
3)TCP收到数据后将发送一个确认。
4)TCP将保持它首部的数据校验和。
如果校验和有错,将丢弃数据包
5)TCP数据包可能到达失序,TCP可将数据重新排序。
6)TCP接收端必须丢弃重复的数据
7)TCP提供流量控制

2 TCP数据首部(20byte)
4byte 源端口号(16bit)-目的端口号(16bit)
8byte 序号(32bit)
12byte 确认序号(32bit)
16byte 首部长度(4bit)-保留(6bit)-URG/ACK/PSH/RST/SYN/FIN -窗口大小(16bit)
20byte 检验和(16bit)-紧急指针(16bit)
选项

英文版本
4byte source port(16bit)-dest port(16bit)
8byte sequence(32bit)
12byte ack_seq(32bit)
16byte HLen(4bit)-reserved(6bit)-URG/ACK/PSH/RST/SYN/FIN -window size(16bit)
20byte checksum(16bit)-urgent ptr(16bit)
others and padding

3 TCP的标志位
URG 紧急指针有效
ACK 确认序号有效
PSH 接收方应尽快将这个报文交给应用层
RST 重建连接
SYN 同步序号,用来发起一个连接
FIN 发端完成发送任务标记
第18章 TCP连接的建立与终止
1 建立连接三次握手(3-way handshake)
1)请求端(客户)发送一个SYN段指明打算连接的端口,以及起始序号(ISN)。
2)服务器发回包含服务器的初始序号的SYN报文段作为应答。同时将应答序号设置为客户的序号+1。还有置位ACK。
3)客户将确认需要设置为服务器应答序号+1进行确认(ACK)。

2 关于序号ISN
ISN随时间而变,每一个连接都有不同的ISN

3 终止连接的四次握手
1)客户端发送FIN
2)服务器ACK,确认序号为收到序号+1
3)服务器发送FIN
4)客户确认ACK,序号为收到FIN的序号+1

4 最长报文段长度(MSS)
表示TCP传往另一端的最大块数据的长度。
MSS选项只能出现在SYN报文中。
MSS默认值是536字节。

5 报文最大生存时间(Maximum Segment Lifetime MSL)
任何报文段被丢弃前在网络内的最长时间。
当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TME_WAIT状态停留时间2MSL。这样可以让TCP再次发送罪的ACK以防止这个ACK丢失。

6 产生复位报文段的条件
1)到不存在的端口的连接请求
2)异常终止一个连接
3)检测半打开连接
第19章 TCP的交互数据流
1 Nagle算法
交互式TCP数据报包含的内容非常少
Nagle算法要求TCP连接上最多只有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。
TCP收集这些小分组,并在确认到达时以一个分组的方式发出去。
优点:自适应,确认到达越快,数据发送越快。
第20章 TCP的成块数据流
1 使用TCP滑动窗口协议时,接收方不必确认每一个收到的分组。常使用“隔一个报文确认"策略。

2 滑动窗口
1)窗口的左边沿向右边沿靠近为窗口合拢。发生在数据被发送和确认时。
2)窗口右边沿向右移动时将允许发送更多的数据,称为窗口张开。发生在另一端的接收进程读取已经确认的数据并释放TCP接收缓存时。
3)右边沿向左移动,称为窗口收缩,不建议这样做。
4)窗口不可能向左移动。
5)窗口左沿到达右沿,称之为零窗口,此时发送方不能发送任何数据。
总结:
1)发送方不必发送一个全窗口大小的数据。
2)来自接收方的一个报文段确认数据并把窗口向右移动。
3)窗口可以减小,右沿不能向左移动。
4)接收方在发送ACK前不必等到窗口都被填满。

3 慢启动算法
通过观察到新分组进入网络的速率应该与另一端相同返回确认的速率相同而进行工作。
慢启动为发送方TCP增加了一个窗口:拥塞窗口(congestion windows)。
拥塞窗口:
1)初始化时拥塞窗口被初始化为1个报文段
2)每收到一个ACK,拥塞窗口就增加一个报文段
3)发送方取拥塞窗口与通告窗口的最小值作为发送上限

4 通道容量
capacity(bit)=bandwidth(b/s)*round-trip time
一般称为带宽延时积
增加带宽和增加RTT均可以增加通道容量

5 紧急方式
1)TCP URG比特置位
2)16bit紧急指针被置为一个正的偏移量,该偏移量与TCP首部序号相加,得出紧急数据的最后一个字节序号
紧急方式常被用来传送带外数据,如FTP的中断传输,Telnet的中断等。
第21章 TCP的超时与重传
1 每个连接TCP管理的定时器
1)重传定时器,使用与当希望收到另一端的确认。
2)坚持(persist)定时器,使窗口大小信息保持不断流动。
3)保活(keeplive)定时器可以检测一个到一个空闲连接的另一端何时崩溃或重启。
4)2MSL定时器检测一个连接处于TIME_WAIT状态的时间。

2 往返时间(RTT)测量
TCP超时和重传中最重要的一个部分就是对一个给定连接RTT的测量
1)平滑RTT估算器 R = αR+(1-α)M
α是一个90%的推荐平滑因子,M是新测量值
每次更新时,90%的数据来自前一个估计
RFC推荐的超时时间RTO(Retransmission TimeOut)为Rβ,β的推荐值为2。
2)jacobson的均值估计器
RTO = A + 4D
A = A + gErr 被平滑的RTT
D = D + h(|Err|-D) 被平滑的均值偏差
Err = M - A 测量值与当前值之差
h = 0.25
g = 0.125

如果多次出现超时,依然按照两倍速度进行指数退避
同时第一次计算RTO = A + 2D,以后均取4
A被初始化为0 ,D被初始化为3

Karn算法:重传后收到的ACK是对应哪个报文?当一个超时和重传发生时,在重传数据的确认最后到达之前,不能更新RTT估算器。

3 拥塞避免算法(不同于慢启动算法)
两种分组丢失的指示:发生超时和接收到重复的确认
拥塞窗口cwnd
慢启动门限ssthresh
拥塞避免算法和慢启动算法:
1)给定连接,初始化cwnd=1报文段,ssthresh=65536字节
2)TCP输出不能超过cwnd和接收方通告大小。
3)拥塞发生时(超时或收到重复确认),ssthresh被设置为当前窗口的一半(cwnd和接收方通告窗口的最小值,最少为2个报文段)。如果超时引起阻塞,cwnd设置为1,这就是慢启动。
4)新的数据被对方确认后,增加cwnd。
如果cwnd小于或等于ssthresh,则处于慢启动,cwnd成倍递增。
如果cwnd大于ssthresh,则处于拥塞避免,每次cwnd增加1(线性增长)

4 收到失序报文段的处理
TCP立即需要产生一个ACK(重复的ACK),这个重复的不应被迟延,目的在于告诉对方收到一个失序的报文段,并告诉对方自己希望收到的报文段。

5 快速重传与快速恢复算法
快速重传:接收到超过三个重复ACK,重传丢失数据包,无需等待超时定时器。接下来执行快速恢复算法。
快速恢复算法:
1)收到第三个重复ACK时,将ssthresh设置为当前cwnd的一半。重传报文段,设置cwnd为ssthresh加上三倍的报文段大小。
2)每次收到另一个重复的ACK,cwnd+1,并发送一个分组。
3)当下一个确认新数据,设置cwnd为ssthresh。
第22章 TCP的坚定定时器
1 概述
TCP不对ACK报文进行确认,只确认含有数据的ACK报文段
为了防止通告窗口扩大的ACK丢失,发送方使用一个坚定定时器周期性向接收方查询(窗口探查),以发现窗口是否增大。

2 坚定定时器
1)坚定定时器采用普通TCP退让,总在5-60秒之间。
2)坚定定时器与超时重传不同,TCP从不放弃发送窗口探查,知道窗口被打开或者或者进程终止。

3 糊涂窗口综合症(Silly Window Syndrome)
少量数据进行交换,而不是满长度的报文段。接收方可能通告小窗口,发送方可能发送短报文。
避免出现糊涂窗口综合症的方法:
1)接收方不通告小窗口(当剩余小窗口时不通告,积累到一定再通告),除非窗口可以增加超过一个MSS或接收方缓存空间的一半
2)发送方
(a)可以发送一个满长报文段
(b)可以发送至少是接收方窗口一半的报文段
(c)可以发送任何数据且不希望接收ACK

第23章 TCP的保活定时器
1 TCP链路的情况和保活定时器的作用
1)对端完全正常
2)对端已经崩溃,重试10伺候退出
3)对端已经崩溃并重启,对端对探寻报文返回RST信号
4)对端无法到达,和2相同
第24章 TCP的未来
1 路径MTU发现: 利用DF不要分片和ICMP的错误返回来探测路径的最大MTU

2 长肥管道 (Long Fat Network)
具有大的带宽时延乘积的网络带来多种问题:
1)需要更大的窗口提供吞吐量
2)出现分组丢包会使吞吐量急剧减少
3)TCP仅测量一次RTT,需要更好的RTT测量机制
4)TCP序号重复问题

3 千兆网络
时延限制(光速限制)占据主要地位,带宽不再成为瓶颈

4 窗口扩大选项 将窗口由16bit扩大到32bit

5 时间戳选项 
发送方在报文中放置一个时间戳,接收方在报文中确认这个数值。可以更好的计算RTT,不需要两个主机进行时钟同步。

6 PAWS 防止序号回绕 使用时间戳

0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值