zoukankan      html  css  js  c++  java
  • TCP/IP协议与Socket

    1.计算机网络体系结构分层

    OSI 参考模型注重“通信协议必要的功能是什么”,

    TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。

    2.TCP/IP基础

    2.1 TCP/IP含义

    IP进行通信时所必须用到的协议群的统称。

    具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。

    他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分。

    TCP/IP 一词泛指这些协议,因此,有时也称 TCP/IP 为网际协议群。

    2.2 数据包

    包、帧、数据包、段、消息

    以上五个术语都用来表述数据的单位,大致区分如下:

    • 包,全能性术语;
    • 帧,用于表示数据链路层中包的单位;
    • 数据包,是 IP 和 UDP 等网络层以上的分层中包的单位;
    • 段, TCP 数据流中的信息;
    • 消息,应用协议中数据的单位。

    网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上一层传过来的数据。

    首部的结构由协议的具体规范详细定义。在数据包的首部,明确标明了协议应该如何读取数据。

    看到首部,也就能够了解该协议必要的信息以及所要处理的数据。包首部就像协议的脸。

    ① 应用程序处理

    首先应用程序会进行编码处理,这些编码相当于 OSI 的表示层功能;

    编码转化后,邮件不一定马上被发送出去,这种何时建立通信连接何时发送数据的管理功能,相当于 OSI 的会话层功能。

    ② TCP 模块的处理

    TCP 根据应用的指示,负责建立连接、发送数据以及断开连接。

    TCP 提供将应用层发来的数据顺利发送至对端的可靠传输。为了实现这一功能,需要在应用层数据的前端附加一个 TCP 首部。

    ③ IP 模块的处理

    IP 将 TCP 传过来的 TCP 首部和 TCP 数据合起来当做自己的数据,并在 TCP 首部的前端加上自己的 IP 首部。IP 包生成后,参考路由控制表决定接受此 IP 包的路由或主机。

    ④ 网络接口(以太网驱动)的处理

    从 IP 传过来的 IP 包对于以太网来说就是数据。给这些数据附加上以太网首部并进行发送处理,生成的以太网数据包将通过物理层传输给接收端。

    ⑤ 网络接口(以太网驱动)的处理

    主机收到以太网包后,首先从以太网包首部找到 MAC 地址判断是否为发送给自己的包,若不是则丢弃数据。

    如果是发送给自己的包,则从以太网包首部中的类型确定数据类型,再传给相应的模块,如 IP、ARP 等。这里的例子则是 IP 。

    ⑥ IP 模块的处理

    IP 模块接收到 数据后也做类似的处理。从包首部中判断此 IP 地址是否与自己的 IP 地址匹配,如果匹配则根据首部的协议类型将数据发送给对应的模块,如 TCP、UDP。这里的例子则是 TCP。

    另外吗,对于有路由器的情况,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送往的主机或路由器之后再进行转发数据。

    ⑦ TCP 模块的处理

    在 TCP 模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。***检查端口号,确定具体的应用程序。数据被完整地接收以后,会传给由端口号识别的应用程序。

    ⑧ 应用程序的处理

    接收端应用程序会直接接收发送端发送的数据。通过解析数据,展示相应的内容。

    2.3 传输层TCP和UDP

    TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。

    • TCP 是面向连接的、可靠的流协议。只有在确认通信对端存在时才会发送数据。实行“顺序控制”或“重发控制”机制。此外还具备“流控制(流量控制)”、“拥塞控制”、提高网络利用率等众多功能。
    • UDP 是不具有可靠性的数据报协议。不能保证消息一定会到达。根据自己的需要进行重发处理。
    • TCP 用于在传输层有必要实现可靠传输的情况;而在一方面,UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。TCP 和 UDP 应该根据应用的目的按需使用。

    2.4 三次握手

    • 第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。
    • 第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
    • 第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

    https://developer.51cto.com/art/201906/597961.htm

    3.Socket

    Socket不算是一个协议,它是应用层与传输层间的一个抽象层。它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用,以实现进程在网络中通信。

    WebScoket是应用层协议,它也是基于TCP实现,同时借助了HTTP协议建立连接

    WebSocket连接过程:

    1. 服务端与客户端建立TCP连接(三次握手)、建立HTTP连接
    2. 客户端(浏览器)向服务端发送一个请求头包含
      Upgrade: websocket
      Connection: Upgrade
      
      的HTTP请求,申请升级到Websocket连接
    3. 服务端回应的响应头:
      HTTP/1.1 101 Switching Protocals
      Connection: Upgrade
      Upgrade: websocket
      
      同意升级协议,至此双方将基于WebSocket协议通信
  • 相关阅读:
    学习FPGA的几个阶段
    Quartus 编译问题Info (176311): Pin ~ALTERA_nCEO~ is assigned to pin location Pin_P28 (IOPAD_X115_Y43_N7)
    No Title
    最近比较忙
    如何在Qsys 中定制Nand_Flash软核(学习)
    Nand_Flash工作原理(学习)2
    (转)FPGA时序约束的几种方法
    ‘Downloading ELF Process failed’问题如何解决
    celery使用的时候的坑
    Git命令一览
  • 原文地址:https://www.cnblogs.com/CoolYYD/p/13705635.html
Copyright © 2011-2022 走看看