浅入网络基础
TCP/IP 协议族

TCP/IP
协议族按层次分分为
✏️应用层
应用层决定了向用户提供用户服务时通信的活动。
比如:
📨传输层
传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。
比如:
💻网络层
网络层用来处理在网络上流动的数据包。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。
🖨️链路层
链路层用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC、及光纤等物理可见部分。
📣

发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输时,每经过一层时会把对应的首部消去。
网络体系结构
C/S 结构:通信只在客户与服务器之间进行,客户与客户之间不进行直接通信。P2P 结构:每个对等端都同时具备C/S 应用的客户与服务器的特征,是一个服务器与客户的结合体。即 你的电脑 可以是客户端也可能是服务端,比如BitTorent 。- 混合结构:既有中心服务器的存在,又有对等端(客户)间的直接通信。
IP 协议
两个重要条件:
IP 地址指明了节点被分配到的地址。MAC 地址是指网卡所属的固定地址。
注意:别把
TCP 协议
套接字:<源 IP 地址, 源端口号, 目的 IP 地址, 目的端口号>
套接字是实现多路复用和分解的关键
。 (多路复用和多路分解在下面传输层讲)
字节流服务是指,为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方(即三次握手四次挥手
❗❗

- 源端口号和目的端口号用于多路复用
/ 分解。 - 序号指报文的序号,因为数据可能会被切成很多份进行传输(分组交换
) 。 - 确认序号指期望接收的序号,也表示之前的序号已全部正确接收(采用累积确认机制
) 。 - 保留指今后使用,目前值为
0 。 URG 指通知系统此报文段中有紧急数据,应尽快传送(相当于高优先级数据) 。当URG = 1 时,表明紧急指针字段有效,反之0 无效。ACK 指确认序号字段是否有效,当ACK = 1 时有效,反之0 无效。✅PSH = 1 时指尽快将报文段中的数据交付接收应用进程。RST = 1 时表明TCP 连接出现严重差错,必须断开重连。SYN = 1 时表明该报文是一个建立新连接请求控制段或者是通用建立新连接的确认段。✅FIN 指用来释放一个 TCP 连接,当FIN = 1 时表示全部已发送完毕,并请求释放连接。- 接收窗口指接收方愿意或者还可以接收的应用层数据字节数量
。 (需要了解滑动窗口协议) - 校验和用来检测该报文段是否出现差错。
🤝🤝🤝三次握手
- 第一次握手:建立连接时,
Client 发送SYN 报文段(SYN=1 ,seq=x) 到Server ,并进入SYN_SEND
状态,等待Server 确认。 - 第二次握手:
Server 收到SYN 报文段后,确认接收,发回确认报文段(SYNACK 报文段,SYN=1,ACK=1,seq=y,ack_seq=x+1),并此时Server 进入SYN_RECV
状态。 - 第三次握手:
Client 收到Server 的SYNACK 报文段,向Server 发送确认报文段(SYNACK 报文段,SYN=0,ACK=1,seq=x+1,ack_seq=y+1),此包发送完毕,Client 和Server 进入ESTABLISHED
状态,完成三次握手。
注:第一次握手中的
🖐️🖐️🖐️🖐️四次挥手
- 第一次挥手:
Client 发送一个FIN 段(FIN=1, seq=u) ,用来关闭Client 到Server 的数据传送,Client 进入FIN_WAIT_1
状态( 只能收数据不能发送数据) 。 - 第二次挥手:
Server 收到FIN 段后,发送一个ACK 段(ACK=1, seq=v, ack_seq=u+1) 给Client ,Server 进入CLOSE_WAIT
状态。Client 收到ACK 段后进入FIN_WAIT_2
状态。 - 第三次挥手:
Server 发送完最后一个数据段后,向Client 发送FIN 段(FIN=1, ACK=1, seq=w, ack_seq=u+1) ,用来关闭Server 到Client 的数据传送,Server 进入LAST_ACK
状态。 - 第四次挥手:
Client 收到FIN 段后,Client 进入TIME_WAIT
状态,接着发送ACK 段(ACK=1, seq=u+1, ack_seq=w+1) 给Server ,Server 进入CLOSED
状态,释放连接;Client 等待2MSL 时间,进入CLOSED
状态,释放连接。
注:通俗的说就是第一次挥手
UDP 提供无连接、不可靠的数据报传输服务,即无需握手,直接发送数据。DNS 服务就是使用UDP 。使用的是53 端口。套接字:
<目的 IP 地址, 目的端口号>
传输层
传输层的核心任务是为了应用进程之间提供端到端的逻辑通信服务。
传输层主要实现的功能:
- 传输层寻址
- 对应用层报文进行分段和重组
- 对报文进行差错检测
- 实现进程间的端到端的可靠数据传输控制
- 面向应用层实现复用与分解
- 实现端到端的流量控制
- 拥塞控制
传输层的传输使用端口号来寻址。
多路复用与分解:就是支持众多应用程序共用一个传输层协议,并能够将接收到的数据准确交付给不同的应用进程。
💬大致流程为:用户端监听应用程序的端口,哪个有数据待传输则取出(通过报文
DNS 服务
简单来说就是,域名 查找
域名解析分为递归解析和迭代解析。


解析
递归解析:代替查询主机或其他域名服务器,进行进一步的域名查询。即你问我我不知道,但它
( 另一台域名服务器) 可能知道,我帮你去问一下。迭代解析:不会代替查询主机或其他域名服务器,进行进一步的域名查询,只是将下一步要查询的服务器告知查询主机或服务器。即你问我我不知道,但它
( 另一台域名服务器) 可能知道,你去问它吧。
协议与
