参考资料:
http://www.52im.net/topic-tcpipvol1.html?mobile=no
https://www.bilibili.com/video/BV1Mx411v7rJ
第一章:概述
应用层:Telnet,FTP,email等
运输层:TCP,UDP
网络层:IP、ICMP、IGMP
链路层:设备驱动程序和接口卡、以太网协议、令牌环、ARP、RARP、PPP、SLIP
路由器的好处是为不同类型的物理网络提供连接:以太网、令牌环网、点对点的链接和FDDI(光纤分布式数据接口)等等。
运输层TCP:在不可靠的IP层上提供了一个可靠的运输层。为了提供这种可靠的服务,TCP采用了超时重传、发送和接收端到端的确认分组等机制。
网络层IP:提供的是一种不可靠的服务,只是尽可能快地把分组从源结点送到目的结点
网桥是在链路层上对网络进行互连,而路由器则是在网络层上对网络进行互连
应用层:消息(message)、
传输层:数据段(segment)、TCP报文段:端到端
网络层:数据报(datagram)、IP数据报:点到点
数据链路层:帧(frame)
一般来说, TCP服务器是并发的,而UDP服务器是重复的
知名端口:1-1023
临时端口:1024-5000
其他端口:>5000,为其他服务器预留
/etc/services
全为0和全为1的网络号有其他用途
全为0的主机号表示本网络,全为1的主机号表示广播
而网络地址中的主机号为0,以指定网络中的所有主机(如以太网,令牌环网)
网络协议: 第4页 图1-4
数据封装过程: 第7页 图1-7
网络协议传输过程:第8页 图1-8
第二章:链路层
链路层:设备驱动程序和接口卡、以太网协议、令牌环、ARP、RARP
链路层主要有三个目的:(1)为IP模块发送和接收IP数据报;(2)为ARP模块发送ARP请求和接收ARP应答;(3)为RARP发送RARP请求和接收RARP应答。
最大传输单元MTU:以太网:1500
链路层协议:令牌环、点对点PPP、SLIP、loopback协议
PPP和SLIP协议更适合于低速链路
netstat:MTU
路径MTU:ICMP的不可到达错误、IP分片、traceroute
MAC地址
第三章:IP:网际协议
IP提供不可靠、无连接的数据报传送服务
不可靠:不能保证IP数据报一定能到达目的地,简单的错误处理方法:丢弃该数据报并发送ICMP,而不是重传。
无连接:发送的数据报没有顺序,并且接收时也没有顺序
IP地址
Telnet、Rlogin:要求最小的传输时延
FTP:最大的吞吐量
网络管理SNMP、路由选择协议:最高可靠性
用户网络新闻 NNTP:最小费用
IP数据报最长:65535字节
TTL:生存时间字段
16位首部校验和:反码求和全为1。
IP校验和只校验20字节的IP报头;
而ICMP校验和覆盖整个报文(ICMP报头+ICMP数据);
UDP和TCP校验和不仅覆盖整个报文,而且还有12字节的IP伪首部,包括源IP地址(4字节)、目的IP地址(4字节)、协议(2字节,第一字节补0)和TCP/UDP包长(2字节)
而网络地址中的主机号为0,以指定网络中的所有主机(如以太网,令牌环网)
Tracerouter
第四章:ARP协议
ARP:链路层协议,地址解析协议,通过IP获取MAC
arp -a命令
arp高速缓存是有时限的,一般是20分钟(伯克利系统的衍生系统)。
第五章:RARP
RARP:逆地址解析协议,链路层协议
具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取 I P地址。但是无盘机,如X终端或无盘工作站,则需要采用其他方法来获得 I P地址。
R A R P请求以广播方式传送,而R A R P应答一般是单播( u n i c a s t )传送的。
R A R P的一个缺点就是它使用链路层广播,这种广播通常不会由路由器转发。
第六章 ICMP:internet控制报文协议
ICMP:IP层协议
I C M P经常被认为是 I P层的一个组成部分。它传递差错报文以及其他需要注意的信息。
I C M P报文通常被I P层或更高层协议(T C P或U D P)使用。
一些I C M P报文把差错报文返回给用户进程。
ICMP报文:分为查询报文和差错报文
而ICMP校验和覆盖整个报文(ICMP报头+ICMP数据):反码求和
I C M P报文:
- 地址掩码请求和应答(查询报文)
- 时间戳请求和应答(查询报文)
- 不可达端口(差错报文)
U D P的规则之一是,如果收到一份U D P数据报而目的端口与某个正在使用的进程不相符,那么U D P返回一个I C M P不可达报文。可以用T F T P来强制生成一个端口不可达报文
I C M P地址掩码请求和应答以及时间戳请求和应答:在I C M P报文中都有标识符和序列号。发送端应用程序在标识字段内存入一个唯一的数值,以区别于其他进程的应答。序列号字段使得客户程序可以在应答和请求之间进行匹配。
ICMP不可达端口报文包括:导致差错的 I P数据报的首部及后续8个字节
I C M P地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码,无盘系统获取子网掩码的另一个方法是 B O O T P协议
ICMP不可达差错(需要分片)—路径MTU:当路由器收到一份需要分片的的数据报,但是在IP首部设置了不分片的标志比特,那么就会返回ICMP不可达差错报文,从而在程序上实现路径MTU的发现。即不停地加大数据报的长度,一直到返回ICMP不可达差错,即为路径MTU。
tracerout—路径MTU:不停减少数据报的长度,直到能正常通过。
UDP—路径MTU
第七章 ICMP的应用—ping程序
ICMP:IP层协议
ping对应的是ICMP报文
U n i x系统在实现p i n g程序时是把I C M P报文中的标识符字段置成发送进程的 I D号。
序列号从0开始,每发送一次新的回显请求就加 1。p i n g程序打印出返回的每个分组的序列号,允许我们查看是否有分组丢失、失序或重复。
p i n g程序是对两个T C P / I P系统连通性进行测试的基本工具。它只利用 I C M P回显请求和回显应答报文,而不用经过传输层(T C P / U D P) 。P i n g服务器一般在内核中实现I C M P的功能。
第八章 ICMP的应用—traceroute程序
ICMP:IP层协议
traceroute:使用UDP、ICMP
traceroute更适合记录中间路由,补充ping的不足。
Tr a c e r o u t e程序使用I C M P报文和I P首部中的T T L字段(生存周期) 。T T L字段是由发送端初始设置一个8 bit字段。
当路由器收到一份I P数据报,如果其T T L字段是0或1,路由器将该数据报丢弃,并给信源机发一份I C M P“超时”信息。Tr a c e r o u t e程序的关键在于包含这份I C M P信息的I P报文的信源地址是该路由器的I P地址。
traceroute程序的原理:它发送一份T T L字段为1的I P数据报给目的主机。处理这份数据报的第一个路由器将 T T L值减1,丢弃该数据报,并发回一份超时I C M P报文。这样就得到了该路径中的第一个路由器的地址。然后 Tr a c e r o u t e程序发送一份T T L值为2的数据报,这样我们就可以得到第二个路由器的地址。继续这个过程直至该数据报到达目的主机。
traceroute程序判断目的主机:Tr a c e r o u t e程序发送一份U D P数据报给目的主机,但它选择一个不可能的值作为 U D P端口号(大于30 000) ,使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的 U D P模块产生一份“端口不可达”错误(见 6 . 5节)的I C M P报文。
第九章 IP选路
netstat
ICMP重定向报文只能由路由器发出,为主机所用,而不是为路由器所用。
第十章 动态选路协议
IP选路是静态路由,动态选路协议是动态路由
内部网关协议IGP:RIP、OSPF、HELLO
边际网关协议BGP:
RIP:选路信息协议,RIP报文包含在UDP报文中,以跳数为度量
routed程序:支持RIP协议
OSPF:开放最短路径优先协议:直接使用IP,采用多播
BGP:基于TCP层,距离向量协议
CIDR:无类型域间选路
路由协议不严格属于某个特定层
第十一章 UDP 用户数据报协议
UDP校验和:不仅覆盖整个报文,而且还有12字节的IP伪首部,包括源IP地址(4字节)、目的IP地址(4字节)、协议(2字节,第一字节补0)和TCP/UDP包长(2字节)
IP层没有超时和重传机制,TCP有超时和重传机制。
ICMP不可达差错:UDP数据报需要分片但是设置为不可分片
采用UDP的路径MTU发现
UDP和ARP的交互
UDP应用程序:DNS、TFTP、BOOTP、SNMP
I C M P“源站抑制(source quench)”差错:使用U D P产生I C M P“源站抑制(source quench)”差错。当一个系统(路由器或主机)接收数据报的速度比其处理速度快时,可能产生这个差错:流量控制。
UDP 协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议。
UDP:面向数据报,进程的每个输出操作正好产生一个UDP数据报,并组装成一份待发送的IP数据包。
TCP:面向流字符
UDP不提供可靠性
UDP的三大应用:
- 查询DNS
1.1 多个DNS可以同时查询
1.2 快 - 数据传输:TFTP
2.1 停止等待协议:慢(应用层负责确认)
2.2 适合无盘工作站 - 语音视频流
3.1 支持广播和组播
3.2 支持丢包,保障效率
IP分片:如果丢失某个分片,需要重传整个数据报
第十二章 广播和多播
广播和多播仅应用于 U D P
对于以太网,当地址中最高字节的最低位设置为 1时表示该地址是一个多播地址,用十六进制可表示为 0 1 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0(以太网广播地址ff : ff : ff : ff : ff : ff可看作是以太网多播地址的特例)
受限的广播地址是 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5。该地址用于主机配置过程中 I P数据报的目的地址,在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
指向网络的广播地址是主机号为全1的地址。A类网络广播地址为n e t i d . 2 5 5 . 2 5 5 . 2 5 5。一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。
指向子网的广播地址为主机号为全 1且有特定子网号的地址
I G M P:I n t e r n e t组管理协议:让多播路由器了解确定网络中属于确定多播组的任何一个主机
第十三章 IGMP协议
I G M P:I n t e r n e t组管理协议:让多播路由器了解确定网络中属于确定多播组的任何一个主机
IGMP:TTL=1,控制在同一个路由器网内。
第十四章:DNS 域名系统
域名系统(D N S)是一种用于T C P / I P应用程序的分布式数据库,它提供主机名字和 I P地址之间的转换及有关电子邮件的选路信息。
DNS不属于操作系统内核,核心是解析器,运行在应用程序中。
对D N S的访问是通过一个地址解析器( r e s oler)完成的。
操作系统内核中的TCP/IP协议对DNS不知道。
DNS服务器的查询一般情况下基于UDP
第十五章 TFTP 简单文件传送协议
为保持简单和短小,T F T P将使用U D P
以读一个文件作为例子,T F T P客户需要发送一个读请求说明要读的文件名和文件模式 ( m o d e )。如果这个文件能被这个客户读取,T F T P服务器就返回一个块编号为 1的数据分组。T F T P客户又发送一个块编号为1的A C K。T F T P服务器随后发送块编号为2的数据。T F T P客户发回块编号为2的A C K。重复这个过程直到这个文件传送完。除了最后一个数据分组可含有不足 5 1 2字节的数据,其他每个数据分组均含有5 1 2字节的数据。当T F T P客户收到一个不足5 1 2字节的数据分组,就知道它收到最后一个数据分组。
在写请求的情况下,TFTP 客户发送W R Q指明文件名和模式。如果该文件能被 该客户写,TFTP 服务器就返回块编号为0的A C K包。该客户就将文件的头5 1 2字节以块编号为1发出。服务器则返回块编号为1的A C K。
这种类型的数据传输称为停止等待协议。它只用在一些简单的协议如 T F T P中。
TFTP实现简单,低吞吐量
TFTP协议:服务器处理读请求是常用的端口69,但是后续发送数据就重开一个端口传输数据,实现并发。
T F T P协议没有提供安全特性
第十六章 BOOTP 引导程序协议
B O O T P:用于无盘系统进行系统引导的替代方法,又称为引导程序协议
B O O T P使用U D P,且通常需与 T F T P协同工作。
当一个客户使用B O O T P(操作码为1)进行系统引导时,引导请求通常是采用链路层广播,I P首部中的目的 I P地址为2 5 5 . 2 5 5 . 2 5 5 . 2 5 5(受限的广播, 1 2 . 2节) 。源I P地址通常是0 . 0 . 0 . 0,因为此时客户还不知道它本身的 I P地址。回顾图3 - 9,在系统进行自引导时, 0 . 0 . 0 . 0是一个有效的I P地址。
既然B O O T P用于系统引导过程,一个无盘系统需要下列协议才能在只读存储器中完成:B O O T P、T F T P、U D P、I P和一个局域网的驱动程序。
第十七章 TCP 传输控制协议
T C P提供一种面向连接的、可靠的字节流服务。
面向连接:
- 两个TCP应用在传输数据前必须先建立TCP连接
TCP提供可靠性传输
- 应用数据被分割成T C P认为最适合发送的数据块。
- 超时重传
- 当T C P收到发自T C P连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒
- T C P将保持它首部和数据的检验和。
- T C P还能提供流量控制。
字节流服务:两个应用程序通过TCP连接交换8bit字节构成的字节流。TCP不在字节流插入记录标识符。发送方按照10字节、20字节、50字节的顺序发送字节流,收方可以是分四次、每次20字节的顺序接收,一方只负责将字节流放在TCP中,同样的字节流将出现在另一方。
T C P对字节流的内容不作任何解释。 T C P不知道传输的数据字节流是二进制数据,还是A S C I I字符、E B C D I C字符或者其他类型数据。对字节流的解释由 T C P连接双方的应用层解释。
如果将字节流看作在两个应用程序间的单向流动,则 T C P用序号对每个字节进行计数。序号是32 bit的无符号数,序号到达23^2-1后又从0开始。
当建立一个新的连接时,S Y N标志变1。序号字段包含由这个主机选择的该连接的初始序号I S N(Initial Sequence Number) 。该主机要发送数据的第一个字节序号为这个 I S N加1,因为S Y N标志消耗了一个序号(将在下章详细介绍如何建立和终止连接,届时我们将看到 F I N标志也要占用一个序号) 。
T C P可以表述为一个没有选择确认或否认的滑动窗口协议.
T C P的流量控制由连接的每一端通过声明的窗口大小来提供.
检验和覆盖了整个的T C P报文段:T C P首部和T C P数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。
T C P将用户数据打包构成报文段;它发送数据后启动一个定时器;另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据; T C P提供端到端的流量控制,并计算和验证一个强制性的端到端检验和。
许多流行的应用程序如 Te l n e t、R l o g i n、F T P和S M T P都使用T C P。
IP分片有标识位:占16位,标识这玩意很好理解,IP在存储器中维持一个计数器,每产生一个 数据报,计数器就加1,并将此值赋给标识字段。但这个标识并不是平常的序号,因为IP是 无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分 片时,这个标识字段的值就被复制到所有的数据报片的标识字段中,等到重组的时候,相同标识符的值的数据报就会被重新组装成一个数据报。
TCP只有序号:表示偏移量
第18章 TCP连接的建立与终止
S: SYN 同步序号
F:FIN 发送方完成数据发送
三次握手(建立连接):
- 发送方:SYN: 100
- 接收方:SYN:200,ack:101
- 发送方:ack:201
最大报文段长度 MSS
四次挥手:
- 发送方:FIN:100
- 接收方:ack:101
- 接收方:FIN:200
- 发送方:ack:201
MSL:TCP报文段最大生存时间,时间为单位
TTL:IP数据报最大生存时间,时间为跳数
T I M E _ WA I T状态也称为2 M S L等待状态。
一个插口对(即包含本地 I P地址、本地端口、远端I P地址和远端端口的4元组)在它处于2 M S L等待时,将不能再被使用。
复位标识R:终止连接。产生复位的一种常见情况是当连接请求到达时,目的端口没有进程正在听。对于 U D P,我们在6 . 5节看到这种情况,当一个数据报到达目的端口时,该端口没在使用,它将产生一个I C M P端口不可达的信息。而T C P则使用复位。
复位标识R:异常终止一个连接对应用程序来说有两个优点: (1)丢弃任何待发数据并立即发送复位报文段;(2)R S T的接收方会区分另一端执行的是异常关闭还是正常关闭。应用程序使用的A P I必须提供产生异常关闭而不是正常关闭的手段。
复位标识R的使用场景:
- 到不存在的端口的连接请求
- 异常终止连接
- 检测半打开连接
第19章 TCP的交互数据流
TCP的数据传输:块数据、交互数据
交互数据总是以小于最大报文段长度的分组发送。在 R l o g i n中通常只有一个字节从客户发送到服务器。Te l n e t允许一次发送一行输入数据,但是目前大多数实现仍然发送一个字节。
delay ack: 对于这些小的报文段,接收方使用经受时延的确认方法来判断确认是否可被推迟发送,以便与回送数据一起发送。这样通常会减少报文段的数目,尤其是对于需要回显用户输入字符的R l o g i n会话。
nagle算法:在较慢的广域网环境中,通常使用 N a g l e算法来减少这些小报文段的数目。这个算法限制发送者任何时候只能有一个发送的小报文段未被确认。
第20章 TCP的成块数据流
TFTP: 停止-等待协议
TCP:滑动窗口协议—>流量控制
确认机制:
- delay ack
- 隔一个报文段确认
TCP:累积确认
慢启动:拥塞窗口cwnd,指数增加
拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。
PUSH标志:通知接收方将接收到的数据全部交给接受进程。
URG标示:紧急数据
分组丢失:超时和重复确认
慢开始与拥塞避免
慢开始:当cwnd< ssthress, 从一个报文段开始,指数增大
拥塞避免:达到ssthresh值后线性增大
发生拥塞(超时重发):
1.把ssthresh降低为cwnd值的一半
2.把cwnd重新设置为1
3.重新进入慢启动过程。
快重传和快恢复
快速恢复丢失的数据包。
快重传:收到3个重复的确认后(冗余ack重发)(接收方接收到了失序的报文),执行快重传
快速重传做的事情有:
1.把ssthresh设置为cwnd的一半
2.把cwnd再设置为ssthresh的值(具体实现有些为ssthresh+3)
3.重新进入拥塞避免阶段。
快恢复:快重传发生时,ssthresh设置为拥塞窗口的一半,拥塞窗口设置为新的ssthresh
快速恢复的主要步骤是:
1.当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络。
2.再收到重复的ACK时,拥塞窗口增加1。
3.当收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态
https://segmentfault.com/a/1190000018360050
ICMP源站抑制:拥塞窗口cwnd设置为1,慢启动阈值ssthresh不变
第21章 TCP的超时和重传
TCP的可靠:超时和重传
超时重传:指数退避
重传定时器:在规定时间内,需要收到另一端发出的报文确认
坚持定时器:使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口—窗口更新ack
保活定时器:用于检测一个空闲连接的另一端是否还保持连接
2MSL定时器:TIME_WAIT状态的时间
坚持定时器:
问题:ACK的传输不可靠,如果通告窗口更新的ACK报文丢失怎么办?
解决方法:发送方使用坚持定时器来周期性地向接收方查询,以便发现窗口是否已经增大。这些发送发发送的报文段称为窗口探查。指数退避。
糊涂窗口综合症
保活定时器:连接中断
如果一个给定的连接在两个小时之内没有任何动作,则服务器就向客户发送一个探查报文段(我们将在随后的例子中看到这个探查报文段看起来像什么)。客户主机必须处于以下 4个状态之一。
(1) 客户主机依然正常运行,并从服务器可达。客户的 T C P响应正常,而服务器也知道对方是正常工作的。服务器在两小时以后将保活定时器复位。如果在两个小时定时器到时间之前有应用程序的通信量通过此连接,则定时器在交换数据后的未来 2小时再复位。
(2) 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的 T C P都没有响应。服务器将不能够收到对探查的响应,并在 7 5秒后超时。服务器总共发送 1 0个这样的探查,每个间隔 7 5秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。
(3) 客户主机崩溃并已经重新启动。这时服务器将收到一个对其保活探查的响应,但是这个响应是一个复位,使得服务器终止这个连接。
(4) 客户主机正常运行,但是从服务器不可达。这与状态 2相同,因为T C P不能够区分状态4与状态2之间的区别,它所能发现的就是没有收到探查的响应。
第22章 协议
协议:FTP、Telnet、HHTP、SMTP/POP3、SSl、SNMP、SIP
FTP
数据传输主流协议
成块数据流
两个信道
- 控制信道
- 数据信道
两个模式
- Active mode
- Passive mode
Telnet
交互数据流
Http
哑服务器
cookie
多连接
安全性弱
SMTP和POP3
SMTP:客户—>服务器,服务器—>服务器
SSL和TLS
SNMP
网络管理协议