【计算机网络】Linux下的网络通信协议(TCP、UDP、IP、ICMP、ARP、DNS)


图片说明
图片说明

各层协议的作用:https://www.cnblogs.com/pengjie-py/p/11256483.html
TCP/IP 意味着 TCP 和 IP 在一起协同工作。TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信。IP 负责计算机之间的通信。TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。IP 负责将包发送至接受者。

TCP

详细总结戳:https://www.jianshu.com/p/e916bfb27daa
TCP报文格式
图片说明

TCP和UDP的区别

  1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
  2. TCP面向字节流,UDP面向报文。
  3. TCP提供可靠的服务(三次握手四次挥手)。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。TCP通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
  4. UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
  5. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
  6. TCP对系统资源要求较多,UDP对系统资源要求较少。
  7. 使用场景的区别
    【TCP应用场景】
    效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。举几个例子:文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录。
    【UDP应用场景】
    效率要求相对高,对准确性要求相对低的场景。举几个例子:QQ聊天、在线视频、网络语音电话(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)、广播通信(广播、多播)。

TCP和UDP编程步骤的区别
服务端

  • 步骤 TCP UDP
    1 创建一个socket,用函数socket()
    2 设置socket属性,用函数setsockopt()
    3 绑定IP地址、端口等信息到socket上,用函数bind()
    4 开启监听,用函数listen();<br/>接收客户端上来的连接,用函数accept();<br/>收发数据,用函数send()和recv(),或者read()和write(); 循环接收数据,用函数recvfrom()
    5 关闭网络连接
    6 关闭监听 null

客户端

  • 步骤 TCP UDP
    1 创建一个socket,用函数socket()
    2 设置socket属性,用函数setsockopt()
    3 绑定IP地址、端口等信息到socket上,用函数bind()
    4 连接服务器,用函数connect();<br/>收发数据,用函数send()和recv(),或者read()和write(); 发送数据,用函数sendto()
    5 关闭网络连接

UDP

见上方TCP和UDP的区别。
参考链接:https://blog.csdn.net/aa1928992772/article/details/85240358

IP

图片说明

参考链接:https://blog.csdn.net/qq_42058590/article/details/82918678

ICMP

ICMP是网络层的协议,ICMP协议的功能主要有:

  1. 确认IP包是否成功到达目标地址
  2. 通知在发送过程中IP包被丢弃的原因
    图片说明

Q:ping命令的功能
(1)能验证网络的连通性
(2)会统计响应时间和TTL(IP包中的Time To Live,生存周期)

Q:那么如何验证的呢?
(1)ping命令会先发送一个 ICMP Echo Request给对端
(2)对端接收到之后, 会返回一个ICMP Echo Reply
(3)若没有返回,就是超时了,会认为指定的网络地址不存在。

Q:telnet是23端口,ssh是22端口,那么ping是什么端口?
ping命令是基于ICMP,是在网络层。而端口号,是传输层的内容。所以在ICMP中根本就不关注端口号这样的信息。

ARP

ARP协议即地址解析协议。在以太网环境中,数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。在任何时候,一台主机有IP数据报文发送给另一台主机,它都要知道接收方的逻辑(IP)地址。但是IP地址必须封装成帧才能通过物理网络。这就意味着发送方必须有接收方的物理(MAC)地址,因此需要完成逻辑地址到物理地址的映射。而ARP协议可以接收来自IP协议的逻辑地址,将其映射为相应的物理地址,然后把物理地址递交给数据链路层。

ARP请求
任何时候,当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,这个报文包好了发送方的MAC地址和IP地址以及接收方的IP地址。因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层中进行广播。

ARP响应
局域网中的每一台主机都会接受并处理这个ARP请求报文,然后进行验证,查看接收方的IP地址是不是自己的地址,只有验证成功的主机才会返回一个ARP响应报文,这个响应报文包含接收方的IP地址和物理地址。这个报文利用收到的ARP请求报文中的请求方物理地址以单播的方式直接发送给ARP请求报文的请求方。

DNS

它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。DNS协议是用来将域名转换为IP地址(也可以将IP地址转换为相应的域名地址)。

FTP

写不完了,先欠着

全部评论
axi nb
点赞
送花
回复
分享
发布于 2020-04-05 19:50

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务