大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
计算机网络协议详解
本篇文章主要总结一些常见的网络基础概念,并介绍了计算机网络相关协议。
相关参考资料:《鸟哥的Linux私房菜——服务器架设篇》
一、计算机网络协议:OSI七层协议
在服务器与客户端连接中,不论是接收端还是发送端,每一层只认识对方同一层次的数据。
-
Layer 1:物理层
由于网络媒体只能传送 0 与 1 这种位串,因此物理层必须定义所使用的媒体设备之电压与讯号等, 同时还必须了解数据讯框转成位串的编码方式,最后连接实体媒体并传送/接收位串。 -
Layer 2:数据链路层
这一层是比较特殊的一个阶层,因为底下是实体的定义,而上层则是软件封装的定义。因此第二层又分两个子层在进行数据的转换动作。 在偏硬件媒体部分,主要负责的是 MAC (Media Access Control) ,我们称这个数据报裹为 MAC 讯框 (frame), MAC 是网络媒体所能处理的主要数据报裹,这也是最终被物理层编码成位串的数据。 -
Layer 3:网络层
IP就是在这一层定义的, 同时也定义出计算机之间的联机建立、终止与维持等,数据封包的传输路径选择等等。 -
Layer 4:传送层
定义了发送端与接收端的联机技术(如 TCP, UDP 技术), 同时包括该技术的封包格式,数据封包的传送、流程的控制、传输过程的侦测检查与复原重新传送等,以确保各个资料封包可以正确无误的到达目的端。 -
Layer 5:会谈层
主要定义了两个地址之间的联机信道之连接与挂断,此外,亦可建立应用程序之对谈、 提供其他加强型服务如网络管理、签到签退、对谈之控制等,确定网络服务建立联机的确认。 -
Layer 6:表现层
主要定义的是网络服务(或程序)之间的数据格式的转换, 包括数据的加解密也是在这个分层上面处理。 -
Layer 7:应用层
应用层本身并不属于应用程序所有,而是在定义应用程序如何进入此层的沟通接口,以将数据接收或传送给应用程序,最终展示给用户。
二、计算机网络协议:TCP/IP协议
OSI七层协议虽然架构严谨,但是过于复杂,于是在OSI协议的基础上发展出了TCP/IP协议,目前主要使用的是TCP/IP协议。
1.TCP/IP网络接口层
- 以太网传输协议:CSMA/CD
-
接听介质使用情况
A 主机要发送网络数据包前,需要先对网络媒体进行监听,确认没有人在使用后, 才能够发送出讯框。 -
多点传输
A 主机所送出的数据会被集线器复制一份,然后传送给所有连接到此集线器的主机! 也就是说, A 所送出的数据, B, C, D 三部计算机都能够接收的到!但由于目标是 D 主机,因此 B 与 C 会将此讯框数据丢弃,而 D 则会抓下来处理。 -
冲突监测
该通讯数据附有检测能力,若其他主机例如 B 计算机也刚好在同时间发送数据时, 那么 A 与 B 送出的数据碰撞在一块 (出车祸) ,此时这些通讯就是损毁,那么 A 与 B 就会各自随机等待一个时间, 然后重新通过第一步再传送一次数据。
- MAC的封装格式
MAC数据包是整个网络硬件上传输的最小单位,每块物理网卡出厂都会设置一个唯一的MAC号,用于标识每台主机上的不同网卡。
-
最大传输单位(MTU)
标准以太网络讯框所能传送的数据量最大可以到达 1500 bytes , 这个数值就被我们称为 MTU。 -
设备:集线器(Hub)、交换器(Switch)等
2.TCP/IP网络层
-
IP数据包的封装
其中最重要的就是Source Address与Destination Address,分别记载了源IP地址与目标IP地址。
-
IP地址
-
IP地址分级
IP地址共32bits,主要划分为Net_ID(网域号码)与Host_ID(主机号码),在同一个网段内,Net_ID 是不变的,而 Host_ID 则是不可重复。以二进制说明Network第一个数字的定义:
五种分级的十进制表示:
-
Private IP
早在 IPv4 规划的时候就担心 IP 会有不足的情况,而且为了应付某些企业内部的网络设定,于是就有了私有 IP (Private IP) 的产生了。私有 IP 也分别在 A, B, C 三个 Class 当中各保留一段作为私有 IP 网段,分别是:
Class A:10.0.0.0~10.255.255.255
Class B:172.16.0.0~172.31.255.255
Class C:192.168.0.0~192.168.255.255 -
lo网络:127.0.0.0/8
lo网络是指主机内部还回网络,主要用于主机测试。
-
子网掩码Netmask
子网掩码是用来表示Net_ID和Host_ID的,举例来说:
子网掩码还被用来实现子网划分:
-
路由
在同一物理网段中,IP地址设置为同一网域,各主机之间可以直接通讯;当IP不在同一网段中时,各主机无法直接通讯,需要经过网关的转递。流程如下:
1.查询IP数据包的目标IP
2.查询是否位于本机所在的网络路由表中
3.查询默认路由
4.送出数据包至Default Getway后,不予理会Linux中查询路由表:route
-
ARP协议
当想要了解某个 IP 是设定于某张以太网络卡上头时,主机会对整个区网发送出 ARP 数据包,对方收到ARP数据包后就会传回他的MAC,主机就会知道对方所在网卡。
3.TCP/IP传输层
-
TCP协议:面向连接、可靠
TCP数据包封装格式:
TCP报头:
-
TCP三次握手
- A:数据包发起
当客户端想要对服务器端联机时,就必须要送出一个要求联机的数据包,此时客户端必须随机取用一个大于 1024 以上的端口来做为程序沟通的接口。然后在 TCP 的表头当中,必须要带有 SYN 的主动联机(SYN=1),并且记下发送出联机数据包给服务器端的序号 (Sequence number = 10001) 。 - B:数据包接收与确认数据包传送
当服务器接到这个数据包,并且确定要接收这个数据包后,就会开始制作一个同时带有 SYN=1, ACK=1 的数据包, 其中那个 acknowledge 的号码是要给 client 端确认用的,所以该数字会比(A 步骤)里面的 Sequence 号码多一号 (ack = 10001+1 = 10002), 那我们服务器也必须要确认客户端确实可以接收我们的数据包才行,所以也会发送出一个 Sequence (seq=20001) 给客户端,并且开始等待客户端给服务器端的回应。 - C:回送确认数据包
当客户端收到来自服务器端的 ACK 数字后 (10002) 就能够确认之前那个要求数据包被正确的收受了, 接下来如果客户端也同意与服务器端建立联机时,就会再次的发送一个确认数据包 (ACK=1) 给服务器,亦即是 acknowledge = 20001+1 = 20002 。 - D:取得最后确认
若一切都顺利,在服务器端收到带有 ACK=1 且 ack=20002 序号的数据包后,就能够建立起这次的联机了。
- UDP协议:无连接、不可靠
总结
本篇文章对网络基础知识点进行了概括,重点关注IP、子网掩码和TCP的三次握手。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/186873.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...