此篇文章配合草稿中的三次握手,进行整合再发。
TCP/IP协议
两种网络模型
ISO七层网络模型
为使不同计算机厂家之间的计算机能够互相通信,以便在更大的范围内建立计算机网络,国际标准化组织ISO在1981年正式推出了一个网络系统结构--OSI七层网络模型,此后各大计算机厂商迅速向它靠拢,大大推动了计算机网络的发展。
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对应OSI的第四层)。

网络模型不是一开始就有的,在网络刚发展时,网络协议是由各互联网公司自己定义的,比如那时的巨头网络公司 IBM、微软、苹果、思科等等,他们每家公司都有自己的网络协议,各家的协议也是不能互通的,那时候大家觉得这是可以的,但对消费者来说这实际上是技术垄断,因为你买了苹果的设备就不能用微软的设备,因为他们的协议不是一样的,没有统一的标准来规范网络协议,都是这些公司的私有协议。
这样大大的阻碍了互联网的发展,为了解决这个问题,国际标准化组织 1984 提出的模型标准,简称 OSI(Open Systems Interconnection Model),这是一个标准,并非实现。
TCP/IP 协议就是基于此模型设计。
作者:麦索链接:juejin.cn/post/684490…
TCP/IP协议的通信传输流是怎样的?
- 发送端:每经过一层会打上该层所属的首部信息。
- 接收端:每经过一层会把对应的首部信息解析。

一。定义
其实就是互联网协议套件(英语:Internet Protocol Suite,缩写
IPS)是一个网络通讯模型,以及一整个网络传输协议家族,为网际网络的基础通讯架构。它常被通称为TCP/IP协议族(英语:TCP/IP Protocol Suite,或TCP/IP Protocols),简称TCP/IP。因为该协定家族的两个核心协定:TCP(传输控制协议)和IP(网际协议),为该家族中最早通过的标准。
如下图:

二。TCP/IP四个层级
TCP/IP协议族中有一个很重要一点就是分层管理,依次为以下四层,应用层,传输层,网络层,数据链路层。
TCP和IP,也就是运输层和网络层最为重要,所以才叫作“TCP/IP协议”嘛,很好理解。

为什么要分层:
降低耦合度:假如互联网只有一个协议统筹,某一个地方改变设计时,就需要把所有部分都替换掉,而分层只需要把变动的层替换掉即可。
2.1应用层(未理解,先照抄ppp)
应用层也称为应用实体(AE),它由若干个特定应用服务元素(SASE)和一个或多个公用应用服务元素(CASE)组成。每个SASE提供特定的应用服务,例如文件运输访问和管理(FTAM)、电子文电处理(MHS)、虚拟终端协议(VAP)等。CASE提供一组公用的应用服务,例如联系控制服务元素(ACSE)、可靠运输服务元素(RTSE)和远程操作服务元素(ROSE)等。
应用层()是七层OSI模型的第七层。应用层直接和并提供常见的。应用层也向发出请求。应用层是开放系统的最高层,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务.其服务元素分为两类:公共应用服务元素CASE和特定应用服务元素SASE.Application layer应用程序接口网络应用服务表示层应用层
应用层是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。这个层的处理过程是应用特有的;数据从网络相关的程序以这种应用内部使用的格式进行传送,然后被编码成标准协议的格式。
应用层决定了向用户提供的应用服务时的通信活动:
HTTP(万维网服务)FTP(文件传输)SMTP(电子邮件)SSH(安全远程登陆)DNS(名称<-> IP地址寻找,域名系统)- 以及许多其他协议
一旦从应用程序来的数据被编码成一个标准的应用层协议,它将被传送到IP栈的下一层。

图中用到HTTP和DNS
作者:前端劝退师链接:juejin.cn/post/684490…
2.2传输层,Transport Layer(需要重新写一篇TCP和UDP的文章ppp)
传输层有两种协议,一个TCP,还有一个是UDP
TCP:面向连接的Transmisson Control Protocol传输控制协议UDP: 无连接的包传输User DataProtocol用户数据报协议
| UDP | TCP | |
|---|---|---|
| 是否连接 | 无连接 | 面向连接 |
| 是否可靠 | 不可靠传输,不使用流量控制和拥塞控制 | 可靠传输,使用流量控制和拥塞控制 |
| 连接对象个数 | 支持一对一,一对多,多对一和多对多交互通信 | 只能是一对一通信 |
| 传输方式 | 面向报文 | 面向字节流 |
| 首部开销 | 首部开销小,仅8字节 | 首部最小20字节,最大60字节 |
| 场景 | 适用于实时应用(IP电话、视频会议、直播等) | 适用于要求可靠传输的应用,例如文件传输 |
摘自:TCP和UDP比较](juejin.cn/post/684490…)
每一个应用层(TCP/IP参考模型的最高层)协议一般都会使用到两个传输层协议之一:
运行在TCP协议上的协议:
HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。HTTPS(HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。FTP(File Transfer Protocol,文件传输协议),用于文件传输。POP3(Post Office Protocol, version 3,邮局协议),收邮件用。SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子邮件。TELNET(Teletype over the Network,网络电传),通过一个终端(terminal)登陆到网络。SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用。
运行在UDP协议上的协议:
BOOTP(Boot Protocol,启动协议),应用于无盘设备。NTP(Network Time Protocol,网络时间协议),用于网络同步。DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址。
运行在TCP和UDP协议上:
DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作。
作者:前端劝退师链接:juejin.cn/post/684490…
这里j解释tcp三次握手,解释一下“四元组”, SEO和ACK,SYN ppp
参考文章就是这篇https://juejin.cn/post/6844903826747555847#heading-3的3.4
三。网络层,
该层最突出的协议是Internet协议(IP协议),所以又称为IP层。用来处理网络流动的数据包(数据包就是网络上传输的最小数据单位)
IP的原始版本是 ,后来扩展了:(先照抄,ppp,后面仔细查找一下IPV4和IPV6)
IPv4中规定IP地址长度为32,即有2^32-1个节点(40亿)。- 我们网络中已经有超过40亿个节点,鉴于此,促成了IPV6发展。
IPv6中IP地址的长度为128,即有2^128-1个节点(2125亿)- 如果
IPV6被广泛应用以后,全世界的每一粒沙子都会有相对应的一个IP地址。
作者:前端劝退师链接:juejin.cn/post/684490…
4.1 地址
今天,大多数机器都有IPv4和IPv6地址。如果运行ifconfig,则可以看到计算机的IPv4和IPv6地址。
~ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1809:1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
复制代码
4.2 路由
IP路由基于使用地址前缀的规则构构建。 如果在计算机上运行 netstat -rn,则可以在计算机上看到路由表。
- 例如,我的路由表说任何匹配
10.31.10/24的IP数据包应该发送到link#8。 - 如果仔细观察,可以看到“默认”行。该行是一项特殊规则,表示任何与其他规则不匹配的数据包都应使用此规则进行路由寻址。
它就像
switch / case语句中的default。
% netstat -rn
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif
default 10.31.10.222 UGSc 54 0 en0
default link#17 UCSI 0 0 bridge1 !
10.31.10/24 link#8 UCS 9 0 en8 !
Internet6:
Destination Gateway Flags Netif Expire
fe80::%lo0/64 fe80::1%lo0 UcI lo0
复制代码
互联网上的所有节点都有这些路由表,这就是IP数据包路由到达目的地的方式。

如果您想了解如何在网络中将数据包路由到掘金juejin.im,请运行以下命令:
traceroute juejin.im
复制代码
就会得到下图:

作者:前端劝退师链接:juejin.cn/post/684490…
四。链路层(ppp)
如何查看ip地址:jingyan.baidu.com/article/948…
MAC地址是什么:www.baidu.com/s?ie=UTF-8&…
链路层,Link Layer
(又名数据链路层,网络接口层)
数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。
数据链路层主要有两个功能 :帧编码和误差纠正控制。帧编码意味着定义一个包含信息频率、位同步、源地址、目标地址以及其他控制信息的数据包。数据链路层协议又被分为两个子层 :逻辑链路控制(LLC)协议和媒体访问控制(MAC)协议。 [1]
用来处理连接网络中的硬件部分,硬件上的范围均在链路层中,包含
- 操作系统
- 硬件设备驱动
- NIC(Network interface Card 网络适配器:网卡 )
- 光纤等物理可见部分

主机,线路,路由器
5.1 ifconfig: 查看MAC地址
在任何网络中,每个节点都具有 “邻居”。链路层协议提供通过链路直接连接的“邻居”之间通信所需的功能(例如,像CAT5电缆的物理链路,或WiFi中的无线电链路)。
最着名的链路层协议是以太网。在以太网中,每个接口都有一个唯一的48位(6字节)地址,称为媒体访问控制(MAC)地址。
如果在计算机上运行ifconfig,您将看到网络接口的名称及其MAC地址。
~ ifconfig
...
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 88:e9:fe:4c:83:5b
inet6 fe80::1809:d41a:a9a:d664%en0 prefixlen 64 secured scopeid 0x8
inet 192.168.1.8 netmask 0xffffff00 broadcast 192.168.1.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
复制代码
如你所见,MAC地址中的每个字节都由十六进制值表示,并以冒号分隔。
通过以太网链路发送的网络数据包具有源和目标MAC地址。为了发现它的邻居,以太网使用广播查询和通知。使用这些广播机制,另一种称为ARP的协议可以找到邻居的MAC和IP地址之间的映射。如果在计算机上运行arp,则可以看到此映射。
~ arp -a -n
? (10.31.xx.xx) at 98:28:xx:2a:cc:xx on en8 ifscope [ethernet]
? (10.31.xx.xx) at f4:8e:xx38:f5:b5:xx on en8 ifscope [ethernet]
? (10.31.xx.xx) at 54:ee:xx:e1:33:xx on en8 ifscope [ethernet]
....
复制代码
现在我们已经知道MAC和IP地址之间的映射关系。
作者:前端劝退师链接:juejin.cn/post/684490…