OSI七层模型 | TCP/IP协议族层次 | 功能 | TCP/IP协议族 |
应用层 | 应用层 | 电子邮件、远程传输、文件传输 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet |
表示层 | 数据格式化、代码转换、数据加密 | 没有协议 | |
会话层 | 解除或创建别的节点的联系 | 没有协议 | |
传输层 | 传输层 | 提供端对端的接口,处理端到端的通讯细节 | TCP,UDP |
网络层 | 网络层 | 数据在网络中分组传输,网络层处理分组在网络中的活动 | IP,ICMP,RIP,OSPF,BGP,IGMP |
数据链路层 | 链路层 | 传输有地址的帧和错误检测功能 | SLIP,CSLIP,PPP,ARP,RARP,MTU |
物理层 | 以二进制数据形式在物理媒体上传输数据 | ISO2110,IEEE802,IEEE802.2 |
送货汽车
。司机
,他们驾驶着汽车,将打包好的货物(数据帧)从一个城市(物理节点)运输到另外一个城市。跟单员
。负责任的跟单员(使用 TCP 协议)
会保证数据
送到客户手上,若是送不到(须要三次握手,四次挥手)
就让公司再发一次。不负责任的跟单员(使用 UDP 协议)
层只管将快递送到客户指定的地方,无论快递是否送到客户手上。调度员
。他管理着此次物流的相关的信息。例如此次客户要发不少数据,发到哪,究竟是一车一车发、仍是用轮船一次运过去。这些都是他的职责。而运完以后,相关信息(链接)也能够被销毁了,这也是调度员的职责。打包员
。若是快递(数据)太臃肿,他会在不破坏快递的状况下压扁(压缩)它。若是客户注重安全线,全能的快递公司还能用密码箱( SSL/TLS)打包快递再快送。固然,打包员会肯定,目的地快递站的拆包员,能无损地拆开包裹,将快递交给用户。收件员
,当客户(应用)打电话(发起请求)给收件员(应用层)时,收件员能够根据用户的不一样需求提供不一样的服务(不一样协议),好比隔天送达、指定时间送达等等。TCP/IP
从上往下走的时候,会分层的传输进行通信。应用层
到链路层
,接收端是从链路层
往上到应用层
取数据。识别
。数据包
包装为知足该层协议的数据包
数据包
解析为知足上层协议的数据包
二进制包
,只要该层能处理就不须要
按照严格意义上的分层解析二进制包
的时候,你能够在传输层包一层tcp头
,也能够不包,直接交给应用层解析首部
。首部
中包含了该层必要的信息,如发送的目标地址以及协议相关信息。首部
,所要发送的内容为数据。在下一层的角度看,从上一层收到的包所有都被认为是本层的数据。在上面咱们就能直观地看到,每一层的数据以外,其实包了不少层协议的首部node
Wireshark
给咱们解析出来的TCP/IP协议族的四层。链路
、网络
、传输
、应用
硬件地址
,物理层才能将数据包经过路由传至目标地址。怎么经过IP地址去获取硬件地址呢?
75s
,这个时间其实通常就是TCP链接
请求的超时时间。ARP
回答未返回,那么任何TCP
报文段都不会发送。高速缓存
。(每一个已经找到的mac地址都会在arp中缓存
)ARP
。最大传输单元。算法
传输单元
。MTU大小
。MTU
,就会漏传
。短板原理
,根据最小的MTU
来设置IP数据包大小。IP地址
,在内网(局域网)中经过广播
的方式,去询问对应IP的以太网地址
。75s
,就不会继续广播
。MTU
控制咱们传输的大小。局域网
,属于公网
,那么咱们还经过ARP来寻找mac地址
吗?若是是这样,那么咱们将会给每一个公网
发送一个广播
,那得有多恐怖
,因此ARP只存在局域网
。DNS解析
获得对应的网络IP地址
,再经过找上层的路由
去寻找,此时路由发现不是局域网
,将会在往上寻找ISP(Internet Service Provider)
,最后找到对应的mac地址
。上面说到的路由,和它息息相关的就是咱们的网络层,最为
核心
的一层。windows
10进制x4个字节的数目
。由于4位最大的个数为1111,即15,因此首部最长为15x4,60字节
。无需关注
。65536
。数据报
。暂时不关注
。路由数
(若是不设置这个,就会无限回传)。上层协议
是什么。公网IP
,此时咱们没法用ARP
找到远端mac地址
。mac地址
。数据链路层
的以太网首部
放的是本机mac地址
和目标mac地址
。mac地址
和路由mac地址
。IP地址
和源IP地址
则是包在IP首部之中,最后交给路由,让路由处理。传输
的目的,要找到目的IP的主机地址
,并最终到达该主机。因此IP数据报通过的每个节点
都至关因而一个中转站
,也就是路由
。路由选择
。
动态选路
:根据当前网络情况
,权值
,选出一条最佳路径。静态选路
:以手工方式
为每台路由器的路由选择表添加路由。直接送达
目标主机(相同内网下)。转发
至该网络存在的路由器上,再由其统一处理。192.168.0.100
,此时会匹配第一条
,他的Gateway
就是目标的mac地址
,en0是网卡
,咱们能够经过ifconfig
查看(windows用ipconfig)192.168.0.103
,此时路由表没有对应IP地址,则会去寻找相同网络号
,此时找到第二条,他的Gateway
是link#8
至关于广播
出去。192.168.1.2
,此时没法在路由表中匹配,则走default
,对应第三条,他的Gateway
对应192.168.0.1
,192.168.0.1
其实就是咱们的路由器
。上面有提到判断
网络号
相同,这个咱们怎么来作呢?缓存
类别 | 最大网络数 | IP地址范围 | 最大主机数 | 私有IP地址范围 |
---|---|---|---|---|
A | 126(2^7-2) | 0.0.0.0-127.255.255.255 | 16777214 | 10.0.0.0-10.255.255.255 |
B | 16384(2^14) | 128.0.0.0-191.255.255.255 | 65534 | 172.16.0.0-172.31.255.255 |
C | 2097152(2^21) | 192.0.0.0-223.255.255.255 | 254 | 192.168.0.0-192.168.255.255 |
细分
更小力度的网络。子网地址
,能够将原网络分为多个
物理网络的一种机制
。类别 | 子网掩码 |
---|---|
A | 255.0.0.0 |
B | 255.255.0.0 |
C | 255.255.255.0 |
与
运算(1&0=0;0&0=0;1&1=1)来获得网络号
,这里的与
操做须要将IP地址转为二进制
在进行与
。从上面的图,咱们能够看出,每类地址的网络分段安全
(255.0.0.0)
相与
,获得结果两个都是10.0.0.0
,这就是他们的网络号,也正好符合图中的前8位,10转为二进制就是00001010
172.16.0.0
。192.168.10.0
和192.168.0.0
。上面的题目都是在默认的子网掩码之下,那么若是咱们改了子网掩码呢?服务器
255.255.255.0
相与
,此时网络号分别为,172.16.0.0
和172.16.1.0
,则不一样。子网掩码
,把咱们原本相同网段
的IP地址
,划为不通网段
的地址,这样就细分
了网络,有更多的物理网络
。当咱们的MTU
最大传输单元(1500字节,去掉以太网首部,就是1480字节)
知足不了咱们的需求时,咱们就须要IP分片
(分红一片片传输)。网络
IP分片
时,该值被复制每个分片中,至关于每一个分片的id
。IP分片
时为0,进行时为1。IP分片
,前两片末位都为1,最后一片末位为0。前后顺序
。IP分片
时,只丢失一片
数据,也须要重传
整个IP数据报。定时器
,过时
丢弃全部数据报片。一部分
。是否
成功送达目标地址,通知在发送过程中 IP 包被废弃的具体缘由,改善
网络设置等。TTL
,每通过一个路由器就会减1
,直到减到0时IP报就会被丢弃。丢弃
。traceroute
命令的原理就是经过ICMP超时消息来显示发送主机到达特定主机以前经历了多少路由器。解决IP层的痛点,是一种安全的协议,主要经过
链接
疏通了整一个通道,安全传输。并发
箭头
:
SYN A1
来请求创建链接
,SYN就是synchronization(同步)
,并且此时A1是被传在sequence(序列)
中的,此时服务端接收到客户端传来的A1
信号。回应
客户端我接收到了
,因此发送ACK A2(只是确认应答,因此只需在原有的A1+1=A2)
,这里的ACK就是acknowledge(确认)
。而且请求客户端创建链接
, 此时发送一个信号SYN B1
。确认应答
,告知服务端接收到了信号,因此发送ACK B2(由于上次推过来的SYN B1)
。箭头
:
FIN C1
。回应接收到了
,此时发送信号ACK C2
,客户端已经关闭,可是服务器处于半关闭状态(客户端不能向服务器发送请求,服务器仍是能接受客户端请求)
。FIN D1
。回应接收到了
,此时发送信号ACK D2
,服务器也关闭。序列号
是按照顺序
给发送数据的每个字节(8位字节)
都标上号码的编号。接收端查询接收数据TCP首部中的序列号
和数据的长度
,将本身下一步应该接收的序列号
做为确认应答
返送回去。经过序列号
和确认应答号
,TCP可以识别是否
已经接收数据,又可以判断是否须要接收,从而实现可靠传输。重发超时
是指在重发数据以前,等待确认应答到来的那个特定时间间隔。若是超过这个时间仍未收到确认应答,发送端将进行数据重发
。最理想的是,找到一个最小时间
,它能保证“确认应答必定能在这个时间内返回”。误差
。将这个往返时间和误差时间相加,重发超时
的时间就是比这个总和要稍大一点的值。整数倍
。不过,最初其重发超时
的默认值通常设置为6秒
左右。再次发送
。此时,等待确认应答的时间将会以2倍、4倍
的指数函数延长
。强制关闭链接
。而且通知应用通讯异常强行终止
。TCP
链接的同时,也能够肯定发送数据包的单位,咱们也能够称其为“最大消息长度”(MSS)
。最理想的状况是,最大消息长度正好是IP中不会被分片处理的最大数据长度。TCP
在传送大量数据时,是以MSS
的大小将数据进行分割发送。进行重发时也是以MSS
为单位。MSS
在三次握手的时候,在两端主机之间被计算得出。两端的主机在发出创建链接的请求时,会在TCP
首部中写入MSS
选项,告诉对方本身的接口可以适应的MSS
的大小。而后会在二者之间选择一个较小的值投入使用。TCP
以1个段为单位,每发送一个段进行一次确认应答的处理。这样的传输方式有一个缺点
,就是包的往返时间越长通讯性能
就越低。窗口
这个概念。确认应答再也不是以每一个分段
,而是以更大的单位
进行确认,转发时间将会被大幅地缩短
。也就是说,发送端主机,在发送了一个段之后没必要要
一直等待确认应答,而是继续发送
。缓冲区
,经过对多个段同时进行确认应答的功能。链接
的概念,在一个TCP链接中,仅有两方彼此通讯
。数据处理
。流量控制
(Node.js中的流)我会留到下一篇再讲,同时我会结合
node
来说解其中的http
的应用和原理,敬请期待。tcp