TCP/IP网络协议总结(一)
网络参考模型

OSI七层模型,在教学科研中的划分 重5层模型,在工程开发中的划分
重五层模型中:
应用层任务:提供系统与用户的接口;
传输层任务:负责进程间的通信;
网络IP层任务:
一、网络协议首部总结
以太网帧结构


IP报文头部:占20个字节

(1) 版本号:IP协议的版本。如果是IPv4,值是4
(2) 头部长度:4位最大为0xF,注意该字段表示单位是字(4字节)
(3) 服务类型(Type Of Service,TOS):3位优先权字段(现已被忽略) + 4位TOS字段 + 1位保留字段(须为0)。4位TOS字段分别表示最小延时、最大吞吐量、最高可靠性、最小费用,其中最多有一个能置为1。应用程序根据实际需要来设置 TOS值,如ssh和telnet这样的登录程序需要的是最小延时的服务,文件传输ftp需要的是最大吞吐量的服务
(4) 总长度: 指整个IP数据报的长度,单位为字节,即IP数据报的最大长度为65535字节(2的16次方)。由于MTU的限制,长度超过MTU的数据报都将被分片传输,所以实际传输的IP分片数据报的长度远远没有达到最大值。
下来的3个字段则描述如何实现分片:
(5) 标识:唯一地标识主机发送的每一个数据报,其初始值是随机的,每发送一个数据报其值就加1。同一个数据报的所有分片都具有相同的标识值
(6) 标志: 位1保留,位2表禁止分片(DF),若设置了此位,IP模块将不对数据报进行分片,在此情况下若IP数据报超过MTU,IP模块将丢弃数据报并返回一个ICMP差错报文;位3标识更多分片(MF),除了数据报的最后一个分片,其他分片都要把它设置为1
(7) 位偏移:分片相对原始IP数据报数据部分的偏移。实际的偏移值为该值左移3位后得到的,所以除了最后一个IP数据报分片外,每个IP分片的数据部分的长度都必须是8的整数倍
(8) 生存时间::数据报到达目的地之前允许经过的路由器跳数。TTL值被发送端设置,常设置为64。数据报在转发过程中每经过一个路由该值就被路由器减1.当TTL值为0时,路由器就将该数据包丢弃,并向源端发送一个ICMP差错报文。TTL可以防止数据报陷入路由循环
(9) 协议: 区分IP协议上的上层协议。在Linux系统的/etc/protocols文件中定义了所有上层协议对应的协议字段,ICMP为1,TCP为6,UDP为17
(10) 头部校验和: 由发送端填充接收端对其使用CRC算法校验,检查IP数据报头部在传输过程中是否损坏
(11) 源IP地址和目的IP地址: 表示数据报的发送端和接收端。一般情况下这两个地址在整个数据报传递过程中保持不变,不论中间经过多少个路由器
(12) 选项:可变长的可选信息,最多包含40字节。选项字段很少被使用。可用的IP可选项有:
a. 记录路由: 记录数据包途径的所有路由的IP,这样可以追踪数据包的传递路径
b. 时间戳: 记录每个路由器数据报被转发的时间或者时间与IP地址对,这样就可以测量途径路由之间数据报的传输的时间
c. 松散路由选择: 指定路由器的IP地址列表数据发送过程中必须经过所有的路由器
d. 严格路由选择: 数据包只能经过被指定的IP地址列表的路由器
UDP报文头:8个字节

TCP报文头:20个字节

16位源端口号Source Port:告知主机该报文段是来自哪里; 16位目的端口号Destination Port,传给哪个上层协议或应用程序。进行TCP通信时,客户端通常使用系统自动选择的临时端口号,而服务器则使用知名服务端口号(比如DNS协议对应端口53,HTTP协议对应80,这些端口号可在/etc/services文件中找到)。
32位确认号(acknowledgement number):用作对另一方发送来的TCP报文段的响应。其值是收到的TCP报文段的序号值加1。假设主机A和主机B进行TCP通信,那么A发送出的TCP报文段不仅携带自己的序号,而且包含对B发送来的TCP报文段的确认号。反之,B发送出的TCP报文段也同时携带自己的序号和对A发送来的报文段的确认号。
4位头部长度(header length):标识该TCP头部有多少个32bit字(4字节)。因为4位最大能标识15,所以TCP头部最长是60字节。
6位标志位包含如下几项:
URG标志,表示紧急指针(urgent pointer)是否有效。
ACK标志,表示确认号是否有效。我们称携带ACK标识的TCP报文段为确认报文段。
PSH标志,提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间(如果应用程序不将接收 到的数据读走,它们就会一直停留在TCP接收缓冲区中)。
RST标志,表示要求对方重新建立连接。我们称携带RST标志的TCP报文段为复位报文段。
SYN标志,表示请求建立一个连接。我们称携带SYN标志的TCP报文段为同步报文段。
FIN标志,表示通知对方本端要关闭连接了。我们称携带FIN标志的TCP报文段为结束报文段。 16位窗口大小(window size):是TCP流量控制的一个手段。这里说的窗口,指的是接收通告窗口(Receiver Window,RWND)。它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。
16位校验和(TCP check sum):由发送端填充,接收端对TCP报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏。注意,这个校验不仅包括TCP头部,也包括数据部分。这也是TCP可靠传输的一个重要保障。
16位紧急指针(urgent pointer):是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。因此,确切地说,这个字段是紧急指针相对当前序号的偏移,不妨称之为紧急偏移。TCP的紧急指针是发送端向接收端发送紧急数据的方法。
TCP头部选项:TCP头部的最后一个选项字段(options)是可变长的可选信息。这部分最多包含40字节,因为TCP头部最长是60字节(其中还包含前面讨论的20字节的固定部分)。
http客户端请求服务器的过程
在我们客户端,通常通过浏览器从发送请求3步:
http请求报文格式

GET http://192.168.1.104:8080/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Host: 192.168.1.104:8080
If-Modified-Since: Thu, 30 Jul 2020 17:54:40 GMT
If-None-Match: "5f230960-264"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36
1. GET:请求指定的页面信息,并返回实体主体。
2. HEAD: 类似于GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。
3.POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4.PUT:从客户端向服务器传送的数据取代指定的文档的内容。
5.DELETE:请求服务器删除指定的页面。
6.CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7.OPTIONS:允许客户端查看服务器的性能。
8.TRACE:回显服务器收到的请求,主要用于测试或诊断。
9.PATCH:是对PUT 方法的补充,用来对已知资源进行局部更新。
DNS协议
在shell终端输入命令:nslookup www.baidu.com ;
1. 主机 192.168.1.114 先向本地域名服务器 192.168.1.2 进行 递归查询;
2. 本地域名服务器采用 迭代查询,向一个根域名服务器进行查询;
3. 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器 baidu.com 的IP 地址;
4. 本地域名服务器向顶级域名服务器 baidu.com 进行查询;
5. 顶级域名服务器 .com 告诉本地域名服务器,下一步查询权限服务器 www.baidu.com 的 IP 地址;
6. 本地域名服务器向权限服务器 www.baidu.com 进行查询;
7. 权限服务器 www.baidu.com 告诉本地域名服务器所查询的主机的 IP 地址是119.63.197.151;
8. 本地域名服务器最后把查询结果 119.63.197.151告诉主机 192.168.1.114 ;
迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。


opcode(4bit)0 表示标准查询,1 表示反向查询,2 表示服务器状态请求
AA(1bit)表示授权回答
TC(1bit)表示可截断的
RD(1bit)表示期望递归
RA(1bit)表示可用递归
rcode(4bit)表示返回码,0 表示没有差错,3 表示名字差错,2 表示服务器错误(ServerFailure)

1 A 由域名获得 IPv4 地址
2 NS 查询域名服务器
5 CNAME 查询规范名称
6 SOA 开始授权
11 WKS 熟知服务
12 PTR 把 IP 地址转换成域名
13 HINFO 主机信息
15 MX 邮件交换
28 AAAA 由域名获得 IPv6 地址
252 AXFR 传送整个区的请求
255 ANY 对所有记录的请求;




浙公网安备 33010602011771号