最近在学习计算机网络中的TCP/IP协议,做了写笔记,如下:
ISO七层模型和TCP/IP四层模型以及各层的作用
ISO模型:物理层、数据链路层、网络层、传输层、 会话层、表示层、应用层
物理层:定义电气特性、传输比特流、电信号和光信号等(二进制传输)
数据链路层:将网络层的数据分割成帧,以帧为单位传输数据(访问介质)
网络层:负责路由选择、交换方式(地址和最佳路径)
传输层:建立连接,以报文的形式传输数据(端到端的可靠性连接)
会话层:控制会话的建立、结束,提供会话服务(主机间通信)
表示层:提供格式化的表示和转换数据服务,如:数据的压缩、加密等(数据表达)
应用层:提供网络与用户软件之间的借口服务(触及应用程序的网络业务)TCP/IP模型:链路层、网络层、传输层、应用层
TCP/IP协议栈为什么是栈
在数据传输时,先封装的后解封,遵循LIFO,故称其为栈。封装、解封装(分用)
封装:数据从上到下,经过每层时加上该层相应的头部
解封装:数据从下到上,去掉对应的头部端口号:用于区分不同的网络服务。
MTU:以太网和IEEE820.3对数据帧长度的限制称作是最大传输单元(MTU),当IP层的数据报比链路层的MTU大时,IP层就要分片。
路径MTU:两台通信主机路径中的最小MTU以太网帧格式:目的地址+原地址+类型+数据
数据:IP数据报、ARP、RARP
MTU:最大传输单元ICMP协议:用于传递差错信息、时间、回显、网络信息等控制数据。
例如:ping程序就是将数据封装成ICMP传输。ARP协议:映射IP地址到MAC地址
ping一台主机(名)的过程:
DNS域名解析获得IP地址 -> 发送ICMP的ECHO包 -> ARP获得目的主机的MAC地址(广播) -> 网络驱动程序 -> 以太网
发送ICMP响应 <-RARP协议:一般用于无盘工作站,无配置文件,启动时向RARP服务器发送RARP请求,获得自己的IP地址。
IP首部长度范围20~60个字节
IP数据报组成:
版本:IP协议版本号,长度为4位,IPV4此字段值为4,IPV6此字段值为6
首部长度:以32位的字为单位,该字段长度范围为:4~15位,即IP数据报首部长度的范围为:20~60个字节。
服务类型(TOS):长度为8位,包含3位的优先权(现已忽略),4位的服务类型(最小延迟、最大吞吐量、最高可靠性、最小费用)和1位保留位(必须置0)
总长度:长度为16位,以字节为单位,该字段的长度包含IP的头部和数据部分。IP数据报最大可达65535个字节。
标识:16位标识,用来标识一个IP包,每发送一个此值会加1
标志与片偏移:3位标志,其中第一位不使用;
第二位DF(Don’t Fragment)为1时表示不分片;
第三位MF(More Fragment)为1时表示后面还有更多的片,为0时表示后面没有片了
IP分片后每一组都有自己的首部,但是片偏移值不同,通过片偏移值接收端可以重新组装IP包
TTL:数据报最多可以经过的路由器的数量,这种机制可以防止数据报在路由器之间不断循环
协议类型:表示IP层上承载的是哪个更高级的协议,1:ICMP, 2:IGMP, 6:TCP, 17:UDP
头部校验和:保证数据的完整性,但校验不包括数据部分。这样做的目的:
1.所有的数据封装在IP数据包在高层协议中均含有覆盖整个数据的校验和
2.数据包每经过一个路由器,IP数据包的头部都会发生改变,而数据部分不会发生改变,只对发生改变的头部进行校验可以节约时间
源IP地址
目的IP地址
选项和填充IP首部校验过程
在发送数据时,为了计算IP数据包的校验和。应该按如下步骤:
(1)把IP数据包的校验和字段置为0;
(2)把首部看成以16位为单位的数字组成,依次进行二进制反码求和;
(3)把得到的结果存入校验和字段中。
在接收数据时,计算数据包的校验和相对简单,按如下步骤:
(1)把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括校验和字段;
(2)检查计算出的校验和的结果是否等于零(反码应为16个0);
(3)如果等于零,说明被整除,校验和正确。否则,校验和就是错误的,协议栈要抛弃这个数据包。TCP特点:基于字节流(可能产生‘粘包’问题)、面向连接、可靠传输、缓冲传输、全双工、流量控制
TCP报文格式
源端口号与目的端口号
序号:表示这个报文段中的第一个数据字节序号
确认号:当ACk为1时有效
头部长度
保留位:6位,必须为0
6个标志位:
URG:紧急指针有效
ACK:确认序号有效
PSH:接收方应尽快将这个报文段交给应用层
RST:连接重置
SYN:同步序号用来发起一个连接
FIN:表示要终止一个连接
窗口大小:通过窗口大小来达到流量控制
校验和:对TCP头与数据进行校验
紧急指针:是一个正的偏移量,与序号字段中的值相加表示紧急数据最后一个字节的序号
选项与填充MSS(最长报文大小)默认是536,因为路由器的一般MTU为576,当MSS为536时加上TCP首部的20再加上IP的首部20等于576,该数据报传输时不需要分片。
TCP连接建立的三次握手
TCP连接终止的四次挥手
TCP如何保证可靠性
网络传输不可靠的情况:数据出现差错、失序、丢包、重复
TC保证可靠性的方面:校验和、超时重传+确认机制、重新排序