TCP/IP 协议和互联网协议群

430 阅读2分钟

TCP/IP 协议群简介

TCP/IP协议群,又名互联网协议群(Internet Protocol Suite)

  • 类似OSI模型,一种网络协议的概念模型

五层模型

应用层(Application): 汇聚OSI的应用、表示、会话层,负责抽象用户数据,提供顶层API

  • 提供应用间通信能力(如:HTTP协议)

  • HTTP/1.1 200 OK

    Accept-Ranges: bytes

    ...

传输层(Transport): 负责点到点的传输,即 host-to-host

  • 传输层两个协议:TCP/UDP协议

  • 传输层要求主机要提供端口号,端口号代表应用

  • 80:80

    数据...

网络层(Internet): 负责像物流公司一样,将封包从一个IP地址送到另一个IP地址

  • IP协议

  • from: 12.3.13.2

    to: 7.6.5.12

    数据...

链路层(Link): 负责设备到设备之间的数据传输,二进制传输

  • 多种底层网络协议Ethernet, Wi-Fi...

  • from: mac地址(设备标识号)

    to: mac地址

    数据...

物理层(Physical): 光电信号的传输

重要标识

port: 8080 -- 端口号 -- 应用

一个主机中有多个应用,在消息来的时候要知道把这个消息给到哪个应用,就需要一个端口号来标识

ipv4: 10.18.3.65

ipv6: fe80::b166:4d55:2584:70a3

位置编号

MAC: 00 1A 3F F1 4C C6

设备编号,设备在出厂时会有一个MAC编号

TCP/IP封包

image-20220320175023418.png

网络层封包 image-20220402011911633.png

完整TCP协议头 image-20220402012145413.png

  • 每个封包称作一个TCP信息段 (TCP Segment)
  • Header用于描述传输行为 (如源端口,目标端口等)
  • Header后面跟若干个byte数据,每个byte拥有自己的序列号

image-20220402012507956.png

三次握手

建立连接为什么需要3次握手 -- 保证数据可靠

客户端 - SYN_SEND: 你好我想跟你聊一下(SYN)

服务端 - SYN_RECEIVED: 好的我有空(SYN-ACK)

客户端 - ESTABLISHED: 我们开始吧(ACK)

<-------- 开始交换数据 -------->

传输和处理数据顺序

客户端: 你今年多大了

客户端: 你们班有多少同学

服务端: 32

服务端: 23

消息的绝对顺序用(SEQ, ACK)这一对元祖描述

  • SEQ (Sequence): 这个消息发送前一共发送了多少字节
  • ACK (Acknowledge): 这个消息发送前一共收到了多少个字节

握手过程:

image-20220402014229365.png

数据传输:

image-20220402014259914.png

服务端会有缓冲区,10ms之内的延迟服务端可以发起纠错,帮你排序,10ms之外的就管不了了,延迟太久就当你消息丢了

挥手(中断连接)

客户端: finish (等待所有对话完成)

服务端: finish (等待所有对话完成)

客户端: see you

核心是要把所有消息处理完

image-20220402015124550.png

总结

  • 最简化原则:没有足够的事情要做,就不必分层
  • 网络中的顺序问题,TCP协议给了完美的解法,这个方法是可以迁移的 -- 算法不变量,找到一个唯一的东西