TCP/IP

传输层:TCP/UDP

滑动窗口:CP发送端用来进行,发送数据的流量控制的(广义)的
窗口的更新是依赖于ACK

1.接受端的接收缓冲区的大小(流量控制(Flow Control狭义))

接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送, 就 会造成丢包,
继而引起丢包重传等等一系列连锁反应. 因此TCP支持根据接收端的处理能力, 来决定发送端的发送速度. 这个机制就叫做流量控制(FlowControl);
接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段, 通过ACK端通知发送端;
窗口大小字段越大, 说明网络的吞吐量越高;
接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;
发送端接受到这个窗口之后, 就会减慢自己的发送速度;
如果接收端缓冲区满了, 就会将窗口置为0; 这时发送方不再发送数据, 但是需要定期发送一个窗口探测数据
段, 使接收端把窗口大小告诉发送端.

2.路程拥塞程度(拥塞控制Congest Control)

虽然TCP有了滑动窗口这个大杀器, 能够高效可靠的发送大量的数据. 但是如果在刚开始阶段就发送大量的数据, 仍然 可能引发问题.
因为网络上有很多的计算机, 可能当前的网络状态就已经比较拥堵. 在不清楚当前网络状态下, 贸然发送大量的数据, 是 很有可能引起雪上加霜的.

滑动窗口还可以对TCP段中的SN 和ASN校验。保证安全。
窗口越大,吞吐量越高。
新的连接:
在这里插入图片描述
应用层先向客户端发送缓冲区域write80个数据
GET /…
80个字节
在这里插入图片描述
在这里插入图片描述
4次挥手:
在这里插入图片描述
两台主机传输数据:
情况一: 数据包已经抵达, ACK被丢了?

部分ACK丢了并不要紧, 因为可以通过后续的ACK进行确认;

情况二: 数据包就直接丢了?

当某一段报文段丢失之后, 发送端会一直收到 1001 这样的ACK, 就像是在提醒发送端 “我想要的是 1001” 一样;
如果发送端主机连续三次收到了同样一个 “1001” 这样的应答, 就会将对应的数据 1001 - 2000 重新发送; 这个时候接收端收到了
1001 之后, 再次返回的ACK就是7001了(因为2001 - 7000)接收端其实之前就已经 收到了,
被放到了接收端操作系统内核的接收缓冲区中

执行任务,相当于定时器,会有到时自动重传,也会有快速重传。

这种机制被称为 “高速重发控制”(也叫 “快重传”)
TCP引入 慢启动 机制, 先发少量的数据, 探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输数据;

在这里插入图片描述
当TCP开始启动的时候, 慢启动阈值等于窗口最大值;
在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回1;
少量的丢包, 我们仅仅是触发超时重传; 大量的丢包, 我们就认为网络拥塞;
当TCP通信开始后, 网络吞吐量会逐渐上升; 随着网络发生拥堵, 吞吐量会立刻下降;
拥塞控制, 归根结底是TCP协议想尽可能快的把数据传输给对方, 但是又要避免给网络造成太大压力的折中方案.

如果收不到ACK,TCP就认为是丢包了,我们需要保证传输的数据都是正确的,会重新发送数据。

.

延迟应答:
因为一收到数据主机不会立刻返回ACK,因为此时的ACK的窗口是比较小的,需要给时间让接收的处理端去消费掉缓冲区的信息。
捎带应答:
在发送数据过程中,一般ACK会伴随发送。如果没有数据了,才会裸发ACK。
面向字节流:
为了保证可靠性,就需要面向字节流。

TCP小结

TCP(传输控制协议)
可靠性:

1.数据保证正确(checksum校验和)
2.保证对方一定是按序收到了数据的(尽可能)

如何保证可靠?

1.SN+ASN+确认应答+超时重传+按序接收
2.为了尽可能的不堵塞(滑动窗口+流量控制【主要考虑接收端的】+拥塞控制【路上的堵塞程度】)

带来的衍生:

1.必须是面向连接(连接管理中的:三次握手+四次挥手)
2.面向流。

异常
写操作:

已经建立连接的两个进程,突然断掉一个进程后,断掉的这个进程的操作系统会自动进行4次挥手。
如果突然一个机器重启了,呢么另外一个机器等不到ACK,会一直发,直到到了时间上限后给对方发送RST。
断电后,我们电脑中的连接管理信息是储存在内存中的,即使再次开机后,对方发送的五元组信息,自己都是不认识的。给一个RST。之前的正常的一段会直接通知应用层出问题了。

读操作:

如果一台机器掉的话,读的一段会有一个等待时间,等待时间内没有会用,会尝试往里面写数据判断对方状态。 TCP:的keepAlive机制
应用层:(发送心跳包heartbeat) 网线被拔:会尝试发送数据,有等待时间,如果还无回应:RST。

网络层:IP,网段,路由

.

1.ip协议:

在这里插入图片描述

4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.
比特科技
4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的
数字是15, 因此IP头部最大长度是60字节.
8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位
TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于
ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.
16位总长度(total length): IP数据报整体占多少个字节.
16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id
都是相同的.
3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁
止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最
后一个分片置为1, 其他是0. 类似于一个结束标记.
13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在
原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的
长度必须是8的整数倍(否则报文就不连续了).
8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL -=
1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环
8位协议: 表示上层协议的类型
16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
32位源地址和32位目标地址: 表示发送端和接收端.
选项字段(不定长, 最多40字节):

2.网段划分:

IP地址分为两个部分, 网络号和主机号:

网络号:保证相互连接的网段具有不同的标识。
主机号:同一网段内,主机之间具有相同的网络号,但必须有不同的主机号。
不同的子网就是,把网络号相同的主机放在一起。
如果在子网中新增加一个主机,则这台主机的网络号需要和子网的网络号相同,但是主机号不许不能和子网中的主机号重复。

通过合理的设置网络号,和主机号,可以保证的同一片网络下,每一个主机的IP不一样。

网络掩码(mask):前面的都是1,后面一定是0。
IP&MASK=网络号
IP&~MASK=主机号

在这里插入图片描述
网络掩码的作用:子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
特殊的IP地址:

将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据
包;
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

NAT技术(公网IP+私有IP)
动态分配IP
IPV6
公网IP

10.,前8位是网络号,共16,777,216个地址
172.16.到172.31.,前12位是网络号,共1,048,576个地址
192.168.
,前16位是网络号,共65,536个地址 包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或
公网IP);

一个局域网内,网络掩码一定一样,同时网络号也一样,主机号不能重复。
IP分片:
分片来源于MTU。
16位标识需要保证一样,确保是同一个IP的数据包
3个标志位,中第二位表示的是紧止分片(1)我们将1改为0。
标志位第三位表示的是,如果是最后一个分片将其置为1.

路由:

如何寻路?
路由表(动态生产,静态配置的)
cmd命令:route print -4 查看路由表。
IP数据包的传输过程和问路是一样的:

当IP数据包, 到达路由器时, 路由器会先查看目的IP;
路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
依次反复, 一直到达目标IP地址;
如果目的IP命中了路由表, 就直接转发即可;
路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,
就按缺省路由条目规定的接口发送到下一跳地址。

数据链路层:找路

认识以太网:

使用IP地址换MAC地址为ARP协议。
使用MAC地址换IP地址为RARP协议。

MAC地址:

MAC地址用来识别数据链路层中相连的节点;
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能
会冲突; 也有些网卡支持用户配置mac地址).

理解mac地址与IP地址:
IP地址表示的起点和终点。
mac地址表示由起点到终点之间一段一段区间的路的起点和终点。

MTU:针对于数据发送的容量限制,这个限制是不同的数据链路层对应的物理层,产生的限制。

MTU对IP协议的影响:
如果IP数据包较大,是需要进行分包的。

将较大的IP包分成多个小包, 并给每个小包打上标签;
每个小包IP协议头的 16位标识(id) 都是相同的;
每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是最后
一个小包, 是的话置为1, 否则置为0);
到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层;
一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是IP层不会负责重新传输数据;

MTU对UDP协议的影响:

一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报.
这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在网
络层被分片, 整个数据被丢失的概率就大大增加了.

MTU对TCP协议的影响:

TCP的一个数据报也不能无限大, 还是受制于MTU. TCP的单个数据报的最大消息长度, 称为MSS(Max
Segment Size);
TCP在建立连接的过程中, 通信双方会进行MSS协商.
最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的
MTU).
双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值.
然后双方得知对方的MSS值之后, 选择较小的作为最终MSS.
MSS的值就是在TCP首部的40字节变长选项中(kind=2);

发送数据过程中:能不分片将可能不分片。
矛盾:理论上,数据一次性发送越多越好,实际上需要考虑MTU,最终有个动态平衡。

NAT:网路地址转换。

在这里插入图片描述

NAT的缺陷:只能从作为客户端,无法从外部向内部建立连接。

DNS:

DNS是属于应用层协议:可以变向的理解为“客服”,我们来查询IP地址。
在这里插入图片描述
可以自己配置IP地址。
路径:C:\Windows\System32\drivers\etc\hosts
面试题普及:数据传输流程:封装|拆包

浏览器中输入www.baidu.com回车
应用层:
1.域名解析,把www.baidu.com转成一个IP地址
(浏览器可能有DNS 缓存,本机有的DNS cache ,Local DNS)
2.HTTP(HTTPS)
建立TCP连接(Server ip,Server port)
发送HTTP请求(GET /)请求格式
接收HTTP响应(HTTP/1.1 200 OK …)响应格式
Chrome:
html解析/展示 同时发起css+js的请求,得到的结构渲染到浏览器上

TCP连接服务器:三次握手
应用层GET请求,解析域名获取目的IP,端口
滑动窗口。
从锁在IP传到对方的应用层,
查询路由表找到下一步的ip地址。网络掩码+目标ip与操作需要通过本地的路由表中与之想匹配的。
在这里插入图片描述
我们的下一跳就是wan口。路由出口的ip地址
根据下一条ip地址,查询对应的mac地址。
1.本地的ip-mac映射表(cache)去查
cmd:arp-a
2.ARP协议(全局域网内广播)
3.mac地址有相对应的下一个mac地址
NAT路由器发现自己需要访问外网,它会先搁置一下然后试图自己先去与www.baidu.com建立连接
访问后会出现
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值