01TCP/IP基础(一)
一、ISO/OSI参考模型
1、 OSI(open system interconnection)开放系统互联模型是由ISO(InternationalOrganization for Standardization)国际标准化组织定义的网络分层模型,共七层。
2、
q 物理层(PhysicalLayer):物理层定义了所有电子及物理设备的规范,为上层的传输提供了一个物理介质,本层中数据传输的单位为比特(bit)。属于本层定义的规范有EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等,实际使用中的设备如网卡等属于本层。
q 数据链路层(DataLink Layer):对物理层收到的比特流进行数据成帧。提供可靠的数据传输服务,实现无差错数据传输。在数据链路层中数据的单位为帧(frame)。属于本层定义的规范有SDLC、HDLC、PPP、STP、帧中继等,实际使用中的设备如switch交换机属于本层。
q 网络层(NetworkLayer):网络层负责将各个子网之间的数据进行路由选择,分组与重组。本层中数据传输的单位为数据包(packet)。属于本层定义的规范有IP、IPX、RIP、OSPF、ICMP、IGMP等。实际使用中的设备如路由器属于本层。
q 传输层(TransportLayer):提供可靠的数据传输服务,它检测路由器丢弃的包,然后产生一个重传请求,能够将乱序收到的数据包重新排序。
q 会话层(SessionLayer):管理主机之间会话过程,包括会话建立、终止和会话过程中的管理。
q 表示层(PresentationLayer):表示层对网络传输的数据进行变换,使得多个主机之间传送的信息能够互相理解,包括数据的压缩、加密、格式转换等。
q 应用层(ApplicationLayer):应用层与应用程序界面沟通,以达至展示给用户的目的。在此常见的协定有: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等
二、TCP/IP四层模型
对等通信
封装
分用
端口
q 众所周知端口(WellKnown Ports):从0到1023,这些端口由IANA分配和控制它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:21端口为ftp服务端口。
q 注册端口(RegisteredPorts):从1024到49151。它些端口不受IANA控制,但由IANA登记并提供使用情况清单。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:1433 Microsoft SQL服务端口
q 动态或私有端口(Dynamicor Private Ports):从49152到65535。IANA不管这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。
02TCP/IP基础(二)
一、MTU
- 以太网和IEEE 802.3对数据帧的长度都有限制,其最大值分别是1500和1492字节,将这个限制称作最大传输单元(MTU,Maximum Transmission Unit)
- 如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就要进行分片(Fragmentation),把数据报分成若干片,这样每一片都小于MTU。
- 当网络上的两台主机互相进行通信时,两台主机之间要经过多个网络,每个网络的链路层可能有不同的MTU,其中两台通信主机路径中的最小MTU被称作路径MTU。
二、以太网帧格式
三、ICMP
四、ARP
五、数据在网络中传输过程
- 步骤a:应用程序ping会判断发送的是主机名还是IP地址,调用函数gethostbyname()解析主机机B,将主机名转换成一个32位的IP地址。这个过程叫做DNS域名解析
- 步骤b:ping程序向目的IP地址发送一个ICMP的ECHO包
- 步骤c:将目标主机的IP地址转换为48位硬件地址,在局域网内发送ARP请求广播,查找主机B的硬件地址。
- 步骤d:主机B的ARP协议层接收到主机A的ARP请求后,将本机的硬件地址填充到应答包,发送ARP应答到主机A。
- 步骤e:发送ICMP数据包到主机B
- 步骤f:主机B接收到主机A的ICMP包,发送响应包。
- 步骤g:主机A接收到主机B的ICMP包响应包。
六、RARP
03TCP/IP基础(三)
一、IP数据报格式
1. 版本
a) IP协议版本号,长度为4位,IPv4此字段值为4,IPv6此字段值为6
2. 首部长度
a) 以32位的字为单位,该字段长度为4位,最大值为15,所以首部长度最大为60个字节
3. 服务类型(TOS)
a) 长度为8位。此字段包含3位的优先权(现已忽略),4位的服务类型子字段和1位的保留位(必须置0)。4位的服务类型分别为最小延迟(D)、最大吞吐量(T)、最高可靠性(R)、最小费用(F)。
4.
5. 总长度
a) 该字段长度为16位,以字节为单位,该字段长度包含IP的头部和数据部分。IP数据报最大可达65535个字节。
6. 标识
a) 16位标识,用来标识一个IP包,每发送一个此值会加1
7. 标志与片偏移
a) 3位标志其中第一位不使用, 每二位DF(Don’tFragment),该位如果为1,如果传输的数据报超过最大传输单元,该数据报会被丢弃,并发送一个ICMP差错报文。第三位MF(More Fragment)表示是否有更多的片,该位为1,说明后续有分片。最后一片MF为0。
b) IP分片后每一个分组都具有自己的首部,但是片偏移值不同,通过片偏移值接收端可以重新组装IP包。
8. TTL
a) TTL(Time To Live)表示数据报最多可经过的路由器的数量。数据报每经过一个路由器,TTL减1,减为0时丢弃,并发送ICMP报文通知源主机。TTL可以避免数据报在路由器之间不断循环。
9. 协议类型
a) 表示IP层上承载的是哪个高级协议。在封装与分用的过程中,协议栈知道该交给哪个层的协议处理。1 ICMP 2 IGMP 6 TCP 17 UDP
10. 头部校验和
a) 保证数据报头部的数据完整性,但校验不包括数据部分。这样做的目的有二:一是所有将数据封装在IP数据包中的高层协议均含有覆盖整个数据的校验和,因此IP数据报没有必要再对其所承载的数据部分进行校验。二是每经过一个路由器,IP数据报的头部要发生改变,而数据部分不变,这样只对发生改变的头部进行校验,显然不会浪费太多的时间。为了减少计算时间,一般不用CRC校验码,而是采用更简单的网际校验和。
11. TTL
a) TTL(Time To Live)表示数据报最多可经过的路由器的数量。数据报每经过一个路由器,TTL减1,减为0时丢弃,并发送ICMP报文通知源主机。TTL可以避免数据报在路由器之间不断循环。
12. 协议类型
a) 表示IP层上承载的是哪个高级协议。在封装与分用的过程中,协议栈知道该交给哪个层的协议处理。1 ICMP 2 IGMP 6 TCP 17 UDP
13. 头部校验和
a) 保证数据报头部的数据完整性,但校验不包括数据部分。这样做的目的有二:一是所有将数据封装在IP数据包中的高层协议均含有覆盖整个数据的校验和,因此IP数据报没有必要再对其所承载的数据部分进行校验。二是每经过一个路由器,IP数据报的头部要发生改变,而数据部分不变,这样只对发生改变的头部进行校验,显然不会浪费太多的时间。为了减少计算时间,一般不用CRC校验码,而是采用更简单的网际校验和。
14. 源IP地址
a) 发送数据的主机IP地址
15. 目的IP地址
a) 接收数据的主机IP地址
16. 选项与填充(选项为4字节整数倍,否则用0填充)
a) 安全和处理限制
b) 路径记录:记录所经历路由器的IP地址
c) 时间戳:记录所经历路由器的IP地址和时间
d) 宽松源站路由:指定数据报文必须经历的IP地址,可以经过没有指定的IP地址。
e) 严格的源站路由:指定数据报文必须经历的IP地址,不能经过没有指定的IP地址。
二、网际校验和
- 网际校验和,英文全称(Internet Checksum)
- 发送方对要发送的数据划分为许多16位字序列(如果数据的字节数为奇数,则在末尾补一字节0凑成偶数。)对这些序列反码求和,便得到校验和。
- 如果数据在传输过程中没有发生任何差错,那么接收方计算校验和的结果应该为全1。如果结果不是全1(即校验和错误)。
三、路由
04TCP/IP基础(四)
一、TCP的特点
- 基本于字节流
- 面向连接
- 可靠传输
- 缓冲传输
- 全双工
- 流量控制
二、TCP报文段格式
1. 源端口号与目的端口号
a) 源端口号和目的端口号,加上IP首部的源IP地址和目的IP地址唯一确定一个TCP连接。
2. 序号
a) 序号表示在这个报文段中的第一个数据字节序号。
3. 确认号
a) 仅当ACK标志为1时有效。确认号表示期望收到的下一个字节的序号。
4. 头部长度
a) 4位,TCP头部最多60个字节
5. 保留位
a) 6位,必须为0
6. 6个标志位
a) URG-紧急指针有效
b) ACK-确认序号有效
c) PSH-接收方应尽快将这个报文段交给应用层
d) RST-连接重置
e) SYN-同步序号用来发起一个连接
f) FIN-表示将要终止一个连接
7. 窗口大小
8. 通过窗口大小来达到流量控制。
9. 校验和
10. 对tcp头与数据进行校验
11. 紧急指针
a) 是一个正的偏移量,与序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。
12. 选项与填充(选项为4字节整数倍,否则用0填充)
a) 最常见的可选字段是最长报文大小MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段中指明这个选项。它指明本端所能接收的最大长度的报文段。该选项如果不设置,默认为536(20+20+536=576字节的IP数据报)
三、连接建立三次握手
四、连接终止四次握手
五、TCP如何保证可靠性
- 应用数据被分割成TCP认为最适合发送的数据块,称为段传递给IP层。
- 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
- 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。
- TCP将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段并且不确认(导致对方超时重传)
- TCP承载于IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对收到的数据进行重新排序。
- IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
- TCP还能提供流量控制。TCP连接的每一方都有一定大小的缓冲空间。
05TCP/IP基础(五)
一、滑动窗口协议
- 通告接收窗口(rwnd):预防应用程序发送的数据超过对方的缓冲区。接收方使用的流量控制
- 拥塞窗口(cwnd):预防应用程序发送的数据超过网络所能承受的能力。发送方使用的流量控制
- 发送窗口取两者较小值
- 慢启动阀值(ssthresh:slow start threshold)
- 慢启动阶段:cwnd从1开始按指数增长直到ssthresh
- 拥塞避免阶段:cwnd按线性增长,直到拥塞,将cwnd=1,ssthresh减半。
二、UDP报文格式