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封包
网络层封包
完整TCP协议头
- 每个封包称作一个TCP信息段 (TCP Segment)
- Header用于描述传输行为 (如源端口,目标端口等)
- Header后面跟若干个byte数据,每个byte拥有自己的序列号
三次握手
建立连接为什么需要3次握手 -- 保证数据可靠
客户端 - SYN_SEND: 你好我想跟你聊一下(SYN)
服务端 - SYN_RECEIVED: 好的我有空(SYN-ACK)
客户端 - ESTABLISHED: 我们开始吧(ACK)
<-------- 开始交换数据 -------->
传输和处理数据顺序
客户端: 你今年多大了
客户端: 你们班有多少同学
服务端: 32
服务端: 23
消息的绝对顺序用(SEQ, ACK)这一对元祖描述
- SEQ (Sequence): 这个消息发送前一共发送了多少字节
- ACK (Acknowledge): 这个消息发送前一共收到了多少个字节
握手过程:
数据传输:
服务端会有缓冲区,10ms之内的延迟服务端可以发起纠错,帮你排序,10ms之外的就管不了了,延迟太久就当你消息丢了
挥手(中断连接)
客户端: finish (等待所有对话完成)
服务端: finish (等待所有对话完成)
客户端: see you
核心是要把所有消息处理完
总结
- 最简化原则:没有足够的事情要做,就不必分层
- 网络中的顺序问题,TCP协议给了完美的解法,这个方法是可以迁移的 -- 算法不变量,找到一个唯一的东西