zoukankan      html  css  js  c++  java
  • 网络是怎样连接的-创建套接字

    2.1 创建套接字

    2.1.1 协议栈的内部结构

    协议栈的内部如图 2.1 所示,分为几个部分,分别承担不同的功能。

    这张图中的上下关系是有一定规则的,上面的部分会向下面的部分委派工作,下面的部分接受委派的工作并实际执行。

    上下关系只是一个总体的规则,其中也有一部分上下关系不明确,或者上下关系相反的情况。

    网络应用程序

    图中最上面的部分是网络应用程序,它们会将收发数据等工作委派给下层的部分来完成。

    Socket库

    应用程序的下面是 Socket 库,其中包括解析器,解析器用来向 DNS服务器发出查询。

    操作系统

    再下面就是操作系统内部了,其中包括协议栈。

    协议栈的上半部分有两块,分别是负责用 TCP 协议收发数据的部分和负责用 UDP 协议收发数据的部分,它们会接受应用程序的委托执行收发数据的操作。

    浏览器、邮件等一般应用程序收发数据时用 TCP;

    DNS 查询等收发较短的控制数据时用 UDP。

    IP协议切分网络包

    下面一半是用 IP 协议控制网络包收发操作的部分。

    在互联网上传送数据时,数据会被切分成一个一个的网络包,而将网络包发送给通信对象的操作就是由 IP 来负责的。

    此外,IP 中还包括 ICMP 协议和 ARP 协议。

    ICMP 用于告知网络包传送过程中产生的错误以及各种控制消息。

    ARP 用于根据 IP 地址查询相应的以太网 MAC 地址。

    网络包

    网络中的数据会被切分成几十字节到几千字节的小块,每一个小数据块被称为一个包。

    网卡驱动

    IP 下面的网卡驱动程序负责控制网卡硬件。

    而最下面的网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收的操作。

    2.1.2 套接字的实体就是通信控制信息

    套接字的实体是什么

    在协议栈内部有一块用于存放控制信息的内存空间,这里记录了用于控制通信操作的控制信息,例如通信对象的 IP 地址、端口号、通信操作的进行状态等。

    本来套接字就只是一个概念而已,并不存在实体,如果一定要赋予它一个实体,我们可以说这些控制信息就是套接字的实体,或者说存放控制信息的内存空间就是套接字的实体。

    套接字对于协议栈的作用

    协议栈在执行操作时需要参阅这些控制信息。

    例如,在发送数据时,需要看一看套接字中的通信对象 IP 地址和端口号,以便向指定的 IP 地址和端口发送数据。

    在发送数据之后,协议栈需要等待对方返回收到数据的响应信息,但数据也可能在中途丢失,永远也等不到对方的响应。在等待一定时间之后需要重新发送丢失的数据。

    此时就需要协议栈能够知道执行发送数据操作后过了多长时间。为此,套接字中必须要记录是否已经收到响应,以及发送数据后经过了多长时间,才能根据这些信息按照需要执行重发操作。

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

    2.1.3 调用 socket 时的操作

    浏览器通过 Socket 库向协议栈发出委托的一系列操作,如图2.3所示。

    应用程序申请创建套接字

    首先是创建套接字的阶段如图 2.3 ①所示,应用程序调用 socket 申请创建套接字,协议栈根据应用程序的申请执行创建套接字的操作。

    在这个过程中,协议栈首先会分配用于存放一个套接字所需的内存空间。

    套接字刚刚创建时,数据收发操作还没有开始,因此需要在套接字的内存空间中写入表示这一初始状态的控制信息。到这里,创建套接字的操作就完成了。

    将套接字的描述符返回给应用程序

    接下来,需要将表示这个套接字的描述符告知应用程序。描述符相当于用来区分协议栈中的多个套接字的号码牌。

    收到描述符之后,应用程序在向协议栈进行收发数据委托时就需要提供这个描述符。

    由于套接字中记录了通信双方的信息以及通信处于怎样的状态,所以只要通过描述符确定了相应的套接字,协议栈就能够获取所有的相关信息,这样一来,应用程序就不需要每次都告诉协议栈应该和谁进行通信了。

  • 相关阅读:
    理解Web路由(浅谈前后端路由与前后端渲染)
    JavaEE开发之SpringMVC中的路由配置及参数传递详解
    Vue2.0 render: h => h(App)的解释
    vue data不可以使用箭头函数的问题解析
    9、响应式数据原理
    项目中的问题
    7-42 整型关键字的散列映射 (25分)
    7-43 字符串关键字的散列映射 (25分)
    7-45 航空公司VIP客户查询 (25分)
    7-44 基于词频的文件相似度 (30分)
  • 原文地址:https://www.cnblogs.com/errornull/p/9960611.html
Copyright © 2011-2022 走看看