【基础夯实】TCP/IP 协议是怎么控制数据收发

【基础夯实】TCP/IP 协议是怎么控制数据收发

网址输入到页面完整显示,对于此问题,粗略的解释可以分为以下几个步骤:

  1. 客户端通过 HTTP 协议对数据进行一次包装
  2. 通过 DNS 服务器(本地无缓存)解析网址的 ip 地址
  3. 通过 TCP 协议与目标 IP 建立连接,二次包装的数据包在网线和路由器完成传递
  4. 返回结果经过浏览器的绘制和渲染,完成页面的构建

对于第三点 TCP/IP 协议是怎么来控制数据在网络中的传递一知半解,最近查阅相关网络方面的书籍才彻底搞懂其原理。

数据收发概览

应用程序发起网络请求后,数据的收发实际是委托给 Socket 库来完成,其操作大致可以分为以下4个阶段:

  1. 创建套接字(创建套接字阶段)
  2. 将管道连接到服务器端的套接字上(连接阶段)
  3. 收发数据(通信阶段)
  4. 断开管道并删除套接字(断开阶段)

下图是这四个阶段的图例:
在这里插入图片描述

Socket 库是一组编程接口(API),用于在不同计算机之间通过网络进行双向通信。它是由操作系统层面提供的,允许应用程序创建网络连接并收发数据。Socket 库抽象了底层的网络细节,使得程序员可以通过一组标准的函数调用来实现网络通信,而无需直接处理复杂的网络协议细节。

Socket 库提供了创建、配置和管理socket的一系列函数,其中包括 socket()connect()write()read()close() 等方法

Socket 完成数据的收发过程是通过协议栈来完成,协议栈的内部及所处位置如下图所示

在这里插入图片描述

图中最上层是应用程序,它们会将收发数据等工作委派给 Socket 库来完成,Socket库包括解析器,解析器用来向DNS服务器发出查询。

第二层就是操作系统内部,协议栈位于该层。协议栈有两部分,上半部分是 TCP 和 UDP 协议,主要用来控制数据连接。下半部分是 IP 协议,控制网络包收发的操作。在互联网上传送数据时,数据会被切分成一个一个的网络包A,而将网络包发送给通信对象的操作就是由IP来负责的。此外,IP中还包括 ICMPA 协议和 ARPB 协议。ICMP 用于告知网络包传送过程中产生的错误以及各种控制消息,ARP 用于根据IP地址查询相应的以太网MAC地址。

创建套接字

协议栈是根据套接字中记录的控制信息来工作的

调用 <描述符> = socket(<使用的ip>,<流模式>,...) 方法(伪代码)后,在协议栈内部会创建一块用于存放控制信息的内存空间,这里记录了用于控制通信操作的控制信息,例如通信对象的IP地址、端口号、通信操作的进行状态等,可以说这些控制信息就是套接字的实体,或者说存放控制信息的内存空间就是套接字的实体。在Windows中可以用netstat命令显示套接字内容:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值