主要是对看的讲解TCP/IP的视频,做的笔记。然后又看了书,做了笔记的补充。
目录标号采用书中的标号,以便查阅。
参考视频:https://www.bilibili.com/video/av10610680?t=303
四层结构:
层 | 主要作用 |
---|---|
应用层 | 处理特定的应用程序细节 |
运输层 | 为两台主机上的应用程序提供端到端的通讯 |
网络层 | 处理分组在网络中的活动 |
链路层 | 处理与任何传输媒介的物理接口细节 |
实例:运行FTP程序的两台主机
在同一层上,双方都有对应的一个或多个协议进行通信。
应用程序通常是用户进程,下三层一般在(操作系统)内核中执行。
应用层关心应用程序的细节,下三层处理通信细节。
发送从上层到下层是封装,接收从下层到上层是分用。
端口号:
服务器一般通过知名端口号识别。
客户端端口号随机,服务器端口号固定。
2.2. 以太网和IEEE 802:
1. 概念:
以太网:是一种标准、CSMA/CD媒体接入方法、速率10Mb/s、地址48bit
IEEE 802:稍有不同的标准集
2. 帧格式:
数据46-1500字节
帧中不同的字段:
以太网是类型;
802.3是长度,不包括CRC检验码的后续数据长度
目的地址、源地址都是6字节
类型字段:
0800->IP;
0806->ARP协议
2.7 环回接口:
允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP通信。
localhost:127开头的IP地址
没看懂的问题: P2 NAT 32:20-38:14
2.8 最大传输单元MTU:在出方向计算
2.9 路径MTU:路径上最小的MTU
3.1 引言
IP提供不可靠、无连接的数据报传送服务。
不可靠的简单处理算法:丢弃数据报,发送ICMP消息报给信源端。
无连接:IP不维护任何状态信息、IP数据报路径可能不同、可能不按顺序发送
3.2 IP数据报首部:
服务类型TOS:3bit优先权子字段(现在已被忽略),4bit的TOS字段,1bit置0
标识:ID
标志:df | mf |
协议:1-ICMP; 6-TCP; 17-UDP
选项:记录路径、时间戳、宽松源站选路、严格源站选路
传输过程中IP地址不变,链路层的目的地址,即MAC地址逐跳改变
IP地址(逻辑地址)映射到MAC地址
设备驱动程序从不检查IP数据报中的目的IP地址
4.2 一个例子
如果目的主机在本地网络上(如以太网、令牌环网或点对点链接的另一端),那么IP数据报可以直接送到目的主机上。如果目的主机在一个远程网络上,那么通过 IP选路函数来确定位于本地网络上的下一站路由器地址,并让它转发 IP数据报。
ARP发送ARP请求广播包,所有网络中的主机都会收到;只有IP地址为目的地址的主机,ARP应答单播包,回给发送主机;发送主机可以发包。
4.3 ARP高速缓存
显示缓存中所有内容的查询命令:arp -a
清除 arp -d
4.4 ARP的分组格式
目的地址为全1的特数地址是广播地址
帧类型:0806-ARP
硬件类型:硬件地址的类型,1表示以太网地址。
协议类型:0800-IP
对于以太网上IP地址的ARP请求来说,硬件地址长度为6,协议地址长度为4
操作字段:1-ARP请求;2-ARP应答;3-RARP请求;4-RARP应答
4.6 arp代理:no ip routing设备发送arp请求
4.7 免费arp:指主机发送ARP查找自己的IP地址
6.1 引言
传递差错报文以及其他需要注意的信息。
接收ICMP差错报文的模块就会把它与某个特定的协议(根据 IP数据报首部中的协议字段来判断)和用户进程(根据包含在 IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来。
不会产生ICMP差错报文的情况:6.5 ICMP端口不可达
ICMP的一个规则是,ICMP差错报文必须包括生成该差错报文的数据报IP首部(包含任何选项),还必须至少包括跟在该 IP首部后面的前 8个字节。
确定问题出在那里
主机的可达不只取决于IP层是否可达,还取决于使用何种协议以及端口号
多数TCP/IP实现都在内核中直接支持ping服务(被ping的设备)
ping中的R选项记录所有出方向的接口,来回都记录了
缺点:能够记录的网络有限,只能存放9个地址;必须所有主机都支持
code指明IP选项的类型,对于R R选项的值为7
win命令:tracert
TTL: 当路由器接收到的IP数据报的TTL字段为0或1,则路由其不转发该数据报,并给信源机发送“ICMP超时”信息
Traceroute程序发送UDP数据报给目的主机,选择一个不可能的值作为UDP端口号(大于30000),即端口号随机。端口号随着报文的发送而增加1。逐渐增加TTL的值,目的主机不可能使用这个端口号所以产生**“端口不可达”错误**。
tracert则通过ICMP操作,发送request
经过防火墙TTL不减1
路由守护进程
是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。不可靠。
TCP是面向字节流的协议
典型应用:查询类(快),数据传输,语音视频流
UDP封装:
端口号表示发送进程和接收进程。TCP端口号与UDP端口号相互独立(rsh和syslog=514)
UDP长度字段指的是UDP首部和UDP数据的字节长度,该字段的最小值为8字节。
UDP检验和覆盖UDP首部和UDP数据。UDP检验和是可选的,TCP是必选的。
12字节的伪首部,计算检验和而设置。
送出的数据报和收到的数据报具有相同的检验和值。
IP分片
IP把MTU(出接口)与数据报长度进行比较;
分片可以发生在原始发送端主机,也可以发生在中间路由器;
重新组装由目的端的IP层来完成,其目的是使分片和重新组装过程对运输层(TCP和UDP)是透明的。
DF=1表示不要分片,直接丢弃,并告知MTU;MF=1表示这片不是最后一片。
没法重传某个分片,需要重传整个数据报。
分片后只有第一片有ICMP信息。
除最后一个分片外,其他分片的数据部分(除IP首部外的其余部分)是8字节的整数倍。
IP数据报是IP层端到端的传输单元,分组是IP层和链路层之间传送的数据单元。
ICMP不可达差错(需要分片)
除非接收到的第一个数据报片,否则不要求任何实现产生ICMP差错。
最大UDP数据报长度:跟socket API、TCP/IP的内核实现、源端和目的端的实现有关
数据报截断:取决于编程接口和实现
ICMP源站抑制:中间路由器缓存不够用了,由中间路由器发送,sock程序要么没有接收到源站抑制差错报文,要么接收到却将它们忽略了
UDP输入队列:发送端的发送速度快,接收端缓存满了,这种情况不会有任何报错
限制本地IP地址:本地有多个IP地址,仅有某个地址才开放的端口号;另外的地址没有开放
限制远端地址:
每个端口有多个接收者:大多数系统在某个时刻只允许一个程序端点与某个本地IP地址及UDP端口号相关联
广播和多播仅应用于UDP
TCP是单播,分别运行于两主机(由IP地址确定)内的两进程(由端口号确定)间存在一条连接。
提供面向连接的、可靠的字节流服务。
交换数据前必须先建立TCP连接,点对点连接。
实现可靠性:数据分块;定时器,不能及时收到,就重发报文段;接收端发送确认;
保持首部和数据的校验和;TCP对报文的处理(排序,处理IP层的错误);流量控制
TCP为应用层提供服务
TCP对字节流的内容不做任何解释,对字节流的解释由TCP连接双方的应用层解释。
参考:TCP报文详解
TCP首部中的各个字段最常见的可选字段是最长报文大小。
TCP报文段中数据部分是可选的
特点:包的数量多,全是小包
通常每个交互按键都会产生一个数据分组,效率低
正常数据流:隔一个报文段确认的策略。
线路上发送分组的顺序受到许多无法控制的因素的影响。
快的发送方和慢的接收方:窗口更新ACK
滑动窗口:允许发送方在停止并等待确认前可以连续发送多个分组。
窗口合拢:数据被发送和并且得到确认时
窗口张开:另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存
左边沿=ACK确定的序号的位置
右边沿=ACK序号+WIN大小
PUSH标志:发送方使用该标志通知接收方将所收到的数据全部提交给接收进程。
慢启动:
发送方和接收方之间可能存在多个路由器和速率较慢的链路
拥塞窗口是发送方使用的流量控制,通告窗口是接收方使用的流量控制。
为发送方的TCP增加:拥塞窗口cwnd
两台主机建立TCP连接后,cwnd=1
发送方的发射上限=min(拥塞窗口,通告窗口)
每收到一个ACK,拥塞窗口就增加一个报文段,指数增长
发送分组的时间:传播时延(电磁波在介质中的传播速率) + 发送时延(带宽,分组大小)
为了让最大限度地利用链路带宽,必须确保发送方不断地受到接收方发送的ACK,作为对受到数据的确认和更新window size的大小。
(带宽时延乘积) 传送通道容量=带宽*RTT
出现拥塞的情况:1.从快速到慢速的管道 2.多管道汇聚
-URG标识 紧急方式:
URG=1时,紧急指针才有效,是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。接收进程读取数据流并被告知合适碰到紧急数据指针。
例子:Telnet和Rlogin从服务器到客户使用“紧急方式:因为这个方向上的数据流很可能被客户的TCP停止,使得应用读取数据。