当我们在浏览器中输入链接https://www.baidu.com/
时, 就会百度的首页展示到浏览器页面中, Web浏览器中的内容不是凭空而来的, 它是通过在浏览器地址栏的URL向服务器获取到数据以后, 将数据展示到界面上.
Web浏览器称为客户端, 而服务器则称为服务端, 客户端和服务端之间的通信需要建立在一定的规则基础上, 才能进行通信, Web采用HTTP的协议规范进行传输, 完成从客户端发送请求, 到服务端响应数据的一系列流程.
HTTP(HyperText Transfer Protocol) 通常被译为超文本传输协议.
TCP/IP协议族
我们使用的网络是在TCP/IP协议族的基础上运作的, 而HTTP协议指数属于它的一个子集, TCP/IP协议是互联网相关的各类协议族的总称.
TCP/IP协议族中最重要的一点是分层管理, 按照层次划分为:应用层, 传输层, 网络层, 数据链路层.
- 应用层:决定了向用户提供应用服务时的通信活动, HTTP协议位于应用层.
- 传输层:上层为应用层, 提供处于网络连接中的两台计算机之间的数据传输, TCP和UDP协议位于传输层.
- 网络层:用来处理在网络中流动的数据包, 数据包是网络传输的最小单位, 该层规定了通过怎样的路径(所谓的传输线路)到达对方计算机, 并把数据包传送给对方.
- 链路层(数据链路层):用来处理连接网络的硬件部分, 包括控制操作系统、硬件的设备驱动、NIC(网卡),以及光纤等物理可见设备。硬件上的范畴均在链路层的作用范围之内.
在发送端应用层发送一个HTTP请求, 为了传输方便, 在传输层使用TCP协议将从应用层接收到的HTTP请求报文进行分割, 并在各个报文上打上标记序号以及端口号后(IP数据包)转发给网络层, 在网络层使用IP协议增加作为通信目的地的MAC地址后转发给链路层(网络之间的通信其实是MAC地址之间的通信), 此时发往网络的通信请求已经准备完毕. 接收端在链路层接收到数据以后, 按照层级向上传输, 一直到应用层.
IP协议
IP(Internet Protocol)协议位于网络层, IP协议的作用是将各种数据包传递给对方, 但是要传输到哪里,就需要指定IP和MAC(Media Access Control Address)地址.
IP地址指明了节点被分配到的地址, MAC地址是指网卡所属的固定地址. IP和MAC配对使用, IP可更改, MAC基本不会变.
IP间的通信以来MAC地址, 我们再Web浏览器中访问百度官网时, 经过了无数个网络设备进行中转才能访问到. 而在进行中转时, 会利用ARP(Address Resolution Protocol)协议搜索以一个中转目标.
ARP是一种地址解析协议, 根据IP地址可以反查出对应的MAC地址.
确保安全的TCP协议
TCP协议位于传输层, 提供可靠的字节流传输, 字节流服务是指为了传输方便,将大块数据分割成报文段(segment)为单位的数据包进行管理, TCP协议为了更容易传送大数据才把数据分割,而且可以确保数据送达.
TCP协议为了确保数据安全送达目标出, 采用了三次握手策略, TCP将数据包发送出去以后不会置之不理, 一定会确认数据是否成功送达.
客户端发送一个带有SYN标志的数据包给服务端, 在服务端接收到数据以后, 回传一个带有SYN/ACK标志的数据包以传达确认信息, 最后客户端回传一个带有ACK标志的数据包, 表示握手结束.
DNS域名解析
DNS位于应用层的协议, 提供域名和IP地址之间的解析服务.
用户通过域名来访问服务器, 而不是通过IP地址来访问, 例如百度的域名为https://www.baidu.com/
, 而其IP地址为119.75.217.109
, 相比纯数字而言, 字母配合数字的表示形式更好记.