1 TCP/IP网络模型
1.1 应用层
只需要专注于为⽤户提供应⽤功能,不⽤去关⼼数据是如何传输的
协议:HTTP、FTP、Telnet、DNS、SMTP
1.2 传输层
传输应用层的数据。
传输层的报⽂中会携带端⼝号,因此接收⽅可以识别出该报⽂是发送给哪个应⽤
协议:TCP、UDP
当传输层的数据包⼤⼩超过
MSS(TCP 最⼤报⽂段⻓度)
,就要将数据包分块.
1.3 网络层
在网络中做实际的传输工作,将数据从⼀个设备传输到另⼀个设备,而传输层专注服务于应用层。
协议:IP
ip协议作用
- 寻址:找到⽬标地址的⼦⽹
- 路由:通过路由算法决定下⼀步⾛哪条路径
IP
协议会将传输层的报⽂作为数据部分,再加上
IP
包头组装成 IP
报⽂,如果
IP
报⽂⼤⼩超过
MTU
(以太⽹中⼀般为
1500
字节)就会
再次进⾏分⽚
1.4 网络接口层
MAC
头部是以太⽹使⽤的头部,它包含了接收⽅和发送⽅的
MAC
地址等信息;
我们可以通过
ARP
协议 获取对⽅的 MAC
地址。
⽹络接⼝层主要为⽹络层提供「链路级别」传输的服务,
负责在以太⽹、
WiFi
这样的底层⽹络上发送原始数据包,⼯作在⽹卡这个层次,
使⽤
MAC
地址来标识⽹络上的设备。
2 键入网址到页面显示
2.1 HTTP
浏览器首先解析URL,从而生成http请求报文发送给Web服务器。
当没有路径名时,就代表访问根⽬录下事先设置的
默认⽂件
,也就是
/index.html
或者
/default.html
这些⽂件。
2.2 DNS域名解析
根据服务器域名查询对应的IP地址。DNS服务器保存域名与IP地址的对应关系。
域名的层级关系类似⼀个树状结构:
根
DNS
服务器(
.
)
顶级域
DNS
服务器(
.com
)
权威
DNS
服务器(
server.com
)
根域的 DNS 服务器信息
保存在互联⽹中
所有的 DNS 服务器中。
域名解析过程
1.客户端首先向本地DNS服务器发出请求
2.如果本地DNS服务器缓存中保存了对应的IP地址,则返回;否则,本地DNS服务器向根域名服务器查询;
3.根域名服务器将对应的顶级域名服务器(.com)的地址传递给本地域名服务器;
4.本地DNS服务器向顶级域名服务器查询;
5.顶级域名服务器将对应权威域名服务器(www.server.com)地址传给本地域名服务器;
6....
2.3 协议栈
通过
DNS
获取到
IP
后,就可以把
HTTP
的传输⼯作交给操作系统中的
协议栈。
应⽤程序(浏览器)通过调⽤
Socket 库,来委托协议栈⼯作。
2.4 TCP
HTTP 是基于 TCP 协议传输的。
源端⼝号和⽬标端⼝号:标识应用
序号:为了解决包乱序的问题是
确认号:确认发出去对⽅是否有收到,解决丢包问题
RST:重连
窗口大小:滑动窗口用于流量控制和拥塞控制
TCP 传输数据之前,要先三次握⼿建⽴连接,
保证双⽅都有发送和接收的能⼒
。
TCP
分割数据:TCP数据部分的长度不能超过
MSS
TCP
的连接状态,在
Linux
可以通过
netstat -napt
命令查看。
2.5 IP
源地址
IP
,即是客户端输出的
IP
地址;
⽬标地址,即通过
DNS
域名解析得到的
Web
服务器
IP
。
协议号
,要填写为
06
(⼗六进制),表示协议为 TCP。
当存在多个⽹卡时,在填写源地址
IP 时,就需要判断到底应该填写哪个地址。这个时候就需要根据
路由表
规则,来判断哪⼀个⽹卡作为源地址
IP。
在
Linux
操作系统,我们可以使⽤
route -n
命令查看当前系统的路由表。
2.6 MAC
MAC包头:
发送⽅
MAC
地址
和
接收⽅⽬标
MAC
地址
,⽤于
两点之间的传输
。
⼀般在
TCP/IP
通信⾥,
MAC
包头的
协议类型
只使⽤:
0800
:
IP
协议
0806
:
ARP
协议