Tiimmi的学习日志11.1-2

2021.11.1打卡

提纲

  • ARP协议工作原理
  • 介绍各种协议
  • RARP协议工作原理
  • TCP三次握手和四次挥手全过程
  • 在浏览器输入网址后到呈现内容,发生了什么
    • 域名解析的工作流程
  • TCP和UDP的区别
  • DNS域名系统,简单描述其工作原理
  • 📌TCP三次握手过程?为什么是三次,两次握手可以吗?
  • 了解交换机、路由器、网关的概念,并说出用途

ARP协议工作原理

ARP即地址解析协议,是工作在链路层的一种ip映射mac地址的协议。

  1. 源主机想要获取某个ip对应的mac地址时,会先查询本地的ARP缓存,如果查询存在,则ARP工作完成。
  2. 若不存在,主机则向网络广播发送包含查询ip的ARP请求包,该ARP请求包有源主机ip、源主机mac以及目标主机的ip,其他主机接收到ARP请求包,会判断目标ip是否为本机ip,不是则丢弃这个ARP包;
  3. 如果是,则取出源ip和源mac,更新缓存,同时发送包含自己的mac地址的ARP回应包,该回应包为单播;
  4. 源主机收到回应,将目标ip和mac映射关系更新到自己的ARP缓存里

介绍一下各种协议


(图片转载自牛客网评论区)

RARP协议工作原理

RARP协议是逆地址解析协议,作用是完成mac到ip地址的映射,主要用于无盘工作站。

工作原理:网络中配置一台RARP服务器,里面保存着mac地址和ip地址的映射关系,当无盘工作站启动时,就封装一个RARP数据包,里面有其mac地址,然后广播到网络上去,当服务器收到请求后,就查找对应的mac地址的ip地址装入相应报文中发回给请求者。因为需要广播请求报文,因此RARP只能用于具有广播能力的网络

TCP三次握手和四次挥手全过程

  • 三次握手:
    1. 服务器监听某个端口,处于listen状态;
    2. 客户端初始化一个序列号,并且将SYN位置为1,发送给服务器,然后处于SYN-SENT状态;
    3. 服务器收到后,也初始化一个序列号,并把确认序列号设置为客户端发送序列号+1,同时SYN和ACK位置1,发送给客户端,然后处于SYN-RCVD状态;
    4. 客户端收到服务器包后,回应最后一个tcp包,确认序列号为服务器序列号+1,ACK为1,发送后客户端处于ESTABLISHED状态;
    5. 服务器收到确认tcp包后,也处于ESTABLISHED状态,三次握手完成。
  • 四次挥手
    1. 主动关闭方(下称主动发)向被动关闭方(下称被动方)发送FIN位为1的TCP包,表明断开链接,进入FIN-WAIT_1状态;
    2. 被动方收到后,先回应主动方一个ACK为1的tcp包,表明同意关闭链接,进入CLOSED_WAIT状态;但此时链接还未关闭,双方未传输完成的数据仍要传输
    3. 主动方收到CACK应答报文后,处于FIN_WAIT_2状态;
    4. 待被动方接收/发送完数据后,再次向主动方发送FIN位为1的tcp包,表明可以断开链接,进入LAST_ACK状态;
    5. 主动方收到FIN包后,回应一个ACK包,然后等待2*msl(msl:报文最大存活时间)的时间,处于TIME_WAIT状态;
    6. 被动方收到ACK确认包后,连接断开,处于CLOSED状态,
    7. 主动方等待2*ml时间结束后,连接断开进入CLOSED状态;四次挥手完成。

在浏览器输入网址后到呈现内容,发生了什么

  1. 浏览器首先对url进行解析,确定请求的Web服务器和文件名,生成一个HTTP报文,随后利用DNS获得主机地址的ip地址,交付给操作系统进行发送,请求进入传输层;
  2. TCP发送数据前,首先要三次握手建立TCP连接,然后TCP对HTTP请求报文进行划分,加上TCP头部,把数据拆解成一块块的进行发送,添加源端口和目的端口,便交付给网络层;
  3. 网络层主要是通过查找路由表确定如何把包送达服务器,期间会经过很多路由器,但他们的工作都是一样,查找路由表确定下一跳的地址;
  4. 随即到达链路层,通过ARP协议查找目的ip地址的mac地址,有了mac地址,便可以通过路由器发送到服务器;
  5. 服务器返回请求后,tcp连接关闭,浏览器解析HTML,渲染呈现,

TCP和UDP的区别

  1. TCP是面向连接的,传输单位称为TCP报文段,UDP是无连接的,传输单位称为用户数据报;
  2. TCP有流量控制和拥塞控制,是可靠传输,UDP则是尽最大可能传输
  3. TCP是点对点传输,而UDP可以一对一,一对多,多对多
  4. TCP传输安全,UDP传输速度快,因此TCP多应用在邮件、网页业务,UDP则应用语音、视频等业务

放一个标准答案1(我认为的)

  1. 连接

    • TCP 是⾯向连接的传输层协议,传输数据前先要建⽴连接。
    • UDP 是不需要连接,即刻传输数据。
  2. 服务对象

    • TCP 是⼀对⼀的两点服务,即⼀条连接只有两个端点。
    • UDP ⽀持⼀对⼀、⼀对多、多对多的交互通信
  3. 可靠性

    • TCP 是可靠交付数据的,数据可以⽆差错、不丢失、不重复、按需到达。
    • UDP 是尽最⼤努⼒交付,不保证可靠交付数据。
  4. 拥塞控制、流量控制

    • TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
    • UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。
  5. 首部开销

    • TCP 首部长度较长,会有⼀定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使⽤了「选项」字段则会变长的。
    • UDP 首部只有 8 个字节,并且是固定不变的,开销较小。
  6. 传输方式

    • TCP 是流式传输,没有边界,但保证顺序和可靠。
    • UDP 是⼀个包⼀个包的发送,是有边界的,但可能会丢包和乱序。
  7. 分片不同

    • TCP 的数据大小如果⼤于 MSS 大小,则会在传输层进行分片,⽬标主机收到后,也同样在传输层组装 TCP数据包,如果中途丢失了⼀个分片,只需要传输丢失的这个分片。
    • UDP 的数据大小如果大于 MTU 大片,则会在 IP 层进⾏分片,⽬标主机收到后,在 IP 层组装完数据,接着再传给传输层,但是如果中途丢了⼀个分片,在实现可靠传输的 UDP 时则就需要重传所有的数据包,这样传输效率非常差,所以通常 UDP 的报⽂应该小于 MTU

DNS域名系统,简单描述其工作原理

  1. 以解析www.baidu.com为例,计算机首先向本地DNS服务器发送DNS请求,若本地缓存命中,到则DNS工作结束;
  2. 没能请求到就向根域名服务器发送DNS请求,根域名服务器发现是归.com顶级域名服务器管,便告诉计算机去向.com顶级域名服务器发送DNS请求;
  3. .com收到请求,发现域名归是www.baidu.com权威域名服务器管,便诉计算机去向www.baidu.com权威域名服务器发送DNS请求;
  4. 计算器再次向www.baidu.com权威域名服务器发送DNS请求,权威服务器查询后将对应的ip地址告诉本地DNS服务器,并且结果缓存,DNS工作结束。

📌TCP三次握手过程?为什么是三次,两次握手可以吗?

  • 三次握手

    1. 客户端向服务器发送SYN=1的tcp包,表明想建立连接;
    2. 服务器收到SYN包,向客户端回一个SYN=1,ACK=1的tcp包;
    3. 客户端收到SYN-ACK包后,向服务器回一个ACK确认包;
    4. 服务器收到ACK确认包后,连接建立。
  • 为什么两次握手不可以?

    采用三次握手主要是为了避免给历史请求建立连接。

    考虑这一种情况,C给S发送了一个SYN=1的包请求建立连接,但这个包因为网络延误没有到达,后面C再次向S发送SYN=1的包,此次成功建立了连接,并断开;关闭后,第一个延误的SYN包终于抵达,S认为C想要再次建立连接,S便回应了SYN-ACK包,如果采用二次握手,此时TCP连接已经建立,但C并不会向S发送请求,就会导致S一直在等待C的数据,造成资源的浪费。

了解交换机、路由器、网关的概念,并说出用途

  1. 交换机

    交换机工作在数据链路层,允许端口之间建立多个并发的连接,允许多对计算机之间通信,实现多个节点之间的并发传输。

    交换机一般以全双工方式工作,利用交换机可以实现虚拟局域网(VLAN),VLAN可以隔离冲突域,也可以隔离广播域

  2. 路由器

    路由器工作在网络层,任务是连接不用的网路并完成路由转发。它主要完成两个功能:分组转发和路由计算。

    前者处理通过路由器的数据流,关键操作是转发表查询、转发以及相关的队列管理和任务调度;后者通过和其他路由器进行基于路由协议的交互,完场路由表的计算。

  3. 网关

    在传统的TCP/IP术语中,网关和路由器没有区别。

    在现代网络术语中,网关和路由器的定义不同。网关能在不用协议间移动数据,而路由器是在不同网路间移动数据。

2021.11.2打卡

大失败,昨天忘记写LeetCode每日一题了。今天补上。

力扣每日一题2021.11.1
575. 分糖果【简单】

Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i] 。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。

医生建议 Alice 要少摄入糖分,只吃掉她所有糖的 n / 2 即可(n 是一个偶数)。Alice 非常喜欢这些糖,她想要在遵循医生建议的情况下,尽可能吃到最多不同种类的糖。

给你一个长度为 n 的整数数组 candyType ,返回: Alice 在仅吃掉 n / 2 枚糖的情况下,可以吃到糖的最多种类数。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/distribute-candies

  • 分析:理解题目意思,也就是求数组candyType中糖的种类,和n/2之间的最小值。
  • 算法设计:把数组candyType转换为不含重复的set集合,比较len(set)和n/2之间的最小指,将其返回。
class Solution:
    def distributeCandies(self, candyType: List[int]) -> int:
        return min(len(set(candyType)), int(len(candyType) / 2))
力扣每日一题2021.11.2
237. 删除链表中的节点【简单】

请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。

题目数据保证需要删除的节点 不是末尾节点 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list

  • 分析:题目保证删除的节点不是末尾节点,因此可以把删除节点的后一个节点复制给删除节点,把删除节点的后一个删除
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def deleteNode(self, node):
        """
        :type node: ListNode
        :rtype: void Do not return anything, modify node in-place instead.
        """
        node.val = node.next.val
        node.next = node.next.next

       :rtype: void Do not return anything, modify node in-place instead.
        """
        node.val = node.next.val
        node.next = node.next.next

今天趁着双十一新用户优惠,入手了一年阿里的轻量服务器,折腾的一下午,今天也太摸了,改天在服务器部署个qq机器人玩一下

加油,共勉


  1. 小林coding-图解网络 ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tiimmi丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值