TCP/IP传输(一)

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情

传输TCP/IP数据

问题引入

  1. 现在使用的以太网中存在不符合国际标准(IEEE802.3/802.2)的部分。

一般情况下,以太网的头部(网络包开头的控制信息)格式并非遵循国际标准(IEEE802.3/802.2), 而是遵循一个更古老的规格(以太网第 2 版,又称 DIX 规格),相对地,国际标准(IEEE802.3/802.2)的 头部格式由于长度太长、效率降低而没有普及。

  1. 最早的 TCP/IP 协议原型设计相当于现在的 TCP 和 IP 合在一起的样子,后来才拆分成为 TCP 和 IP 两 个协议。
  2. 设计网络包通信技术的目的是用计算机进行数据通信

在网络包出现之前,通信都是像电话一样把线路连接起来进行的。但是,连接线路的通信方式只能和 固定的对象进行通信,无法发挥计算机可以处理多种工作的特点。为了解决这个问题,人们设计出了使用网 络包来进行通信的方式。

创建套接字

协议栈的结构

在这里插入图片描述
注:

  1. 上下关系:
    上面的部分会向下面的部分委派工作,下面的部分接受委派的工作并实际执行。
  2. 图解细析:
    (1)Socket库中包含解析器——负责向DNS服务器发出查询。
    (2)协议栈的上半部分分成两块
    负责用 TCP 协议收发数据的部分;(像浏览器、邮件等一般的应用程序 都是使用 TCP )
    负责用 UDP 协议收发数据的部分;(像 DNS 查询等收发较短的控制数据的时候则使用 UDP)
    (3)IP负责将网络包发送给通信对象的操作,IP中还包括 ICMP协议和 ARP协 议。
    ICMP 用于告知网络包传送过程中产生的错误以及各种控制消息,
    ARP 用于根据 IP 地址查询相应的以太网 MAC 地址。
    (4)网卡驱动程序负责控制网卡硬件。
    (5)网卡则责完成实际的收发操作,也就是对网线中的信号执行发送和接收的操作.

套接字实体

通信控制信息或者说存放控制信息的内存空间就是套接字的实体。

因此:套接字中记录了用于控制通信操作的各种控制信息,协议栈则需要根据这些信息判断下一步的行动。

可以通过输入 netstat -ano命令来显示所有套接字:

这里是引用
例如:

  1. 第 1 行,这一行表示 PID 为 984 的程序正在135 端口等待另一方的连接,(本地 IP 地址和远程 IP 地址都是 0.0.0.0,这表示通信还没开始,IP 地址不确定) 。
  2. 第8行,表示 PID为 4 的程序正在使用 IP 地 址为 10.10.1.16 的网卡与 IP 地址为 10.10.1.80 的对象进行通信,且本机使用 1031 端 口,对方使用 139 端口(139 端口是 Windows 文件服务器使用的端口)可以得出这个套接字是连接到一台文件服务器的。

调用stocket

这里是引用

  1. 创建套接字时,首先分配一个套接字所需的内存空间,然后向其中写入初始状态。
  2. 将表示这个套接字的描述符告知应用程序。
  3. 接收描述符后,应用程序向协议栈进行收发数据委托时就提供这个描述符。
posted @ 2022-06-26 20:53  Luciferpluto  阅读(1)  评论(0)    收藏  举报  来源