网络协议
互联网的本质就是一系列网络协议,而互联网协议按照功能不同主要分为OSI七层协议与TCP/IP 四层(也可以是5层)
OSI七层协议
在网络历史的早期,国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版了开放系统互联的七层参考模型。一台计算机操作系统中的网络过程包括从应用请求(在协议栈的顶部)到网络介质(底部) ,OSI参考模型把功能分成七个分立的层次。
层级 | 作用 |
---|
应用层 | 定义了针对每个应用的协议:电子邮件协议,远程登入协议,文件传输协议等 | 表示层 | 定义固有的数据格式和网络标准数据格式的转换:列如定义了图像,文字流,声音,视频等格式转换 | 会话层 | 对通信进行管理,管理传输层以下的分层:连接的建立,断开,持续时间的管理 | 传输层 | 管理两个节点之间的数据传输:管理以及协调数据是否完整到达 | 网络层 | 对地址进行管理以及路由选择:路由到目标地址 | 数据链路层 | 两个互联设备之间传输和识别数据帧:数据帧与比特流之间的转换 | 物理层 | 二进制层,以0,1来代表电压的高低,灯光的闪灭,界定连接器和网线的规格:管理了比特流与电子信号的切换 |
发送方由第七层到第一层 由上到下按照顺序传送数据,每个分层在处理上层传递的数据时,附上当前层协议所必须的 "首部"信息。接收方由第一层到第七层 由下到上按照顺序传递数据,每个分层对接收到的数据进行 "首部"与"内容"分离,在转发给上一层。最终将发送的数据恢复为原始数据
TCP/IP四层协议
TCP/IP (传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
TCP/IP将网络分成四层
层级 | 作用 |
---|
应用层 | 直接为应用提供协议,列如:SMTP,HTTP,TELNET等,除此之后,还提供加密,解密,格式化数据,以及建立或解除其他节点连接 | 传输层 | TCP/UDP,管理两个节点之间的数据传输 | 网络层 | 进行网络连接的建立和终止以及IP地址的寻找等功能 | 网络接口层 | 兼备了数据链路层和物理层,既是传输数据的物理媒介,也是为网络层提供一条准确无误的线路 |
数据传输的完整路径
TCP与UDP
TCP
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的RFC 793定义。TCP 是面向连接的、可靠的流协议
TCP 为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传
报文格式
URG:紧急标志位,说明紧急指针有效;
ACK:确认标志位,多数情况下空,说明确认序号有效
PSH:推标志位,置位时表示接收方应立即请求将报文交给应用层
RST:复位标志,用于重建一个已经混乱的连接;
SYN:同步标志,该标志仅在三次握手建立TCP连接时有效
FIN:结束标志,带该标志位的数据包用于结束一个TCP会话
三次握手,四次挥手
1、客户端主动打开,发送连接请求报文段,将SYN标识位置为1,Sequence Number置为x(TCP规定SYN=1时不能携带数据,x为随机产生的一个值),然后进入SYN_SEND状态。
2、服务器收到SYN报文段进行确认,将SYN标识位置为1,ACK置为1,Sequence Number置为y,Acknowledgment Number置为x+1,然后进入SYN_RECV状态,这个状态被称为半连接状态。
3、客户端再进行一次确认,将ACK置为1(此时不用SYN),Sequence Number置为x+1,Acknowledgment Number置为y+1发向服务器,最后客户端与服务器都进入ESTABLISHED状态
1、客户端发送一个报文给服务端(没有数据),其中FIN设置为1,Sequence Number置为u,客户端进入FIN_WAIT_1状态。
2、服务端收到来自客户端的请求,发送一个ACK给客户端,Acknowledge置为u+1,同时发送Sequence Number为v,服务端年进入CLOSE_WAIT状态。
3、服务端发送一个FIN给客户端,ACK置为1,Sequence置为w,Acknowledge置为u+1,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态。
4、客户端收到FIN后,进入TIME_WAIT状态,接着发送一个ACK给服务端,Acknowledge置为w+1,Sequence Number置为u+1,最后客户端和服务端都进入CLOSED状态。
为什么三次握手和四次挥手
三次握手时,服务器同时把ACK和SYN放在一起发送到了客户端那里。
四次挥手时,当收到对方的 FIN 报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此,己方 ACK 和 FIN 一般都会分开发送
UDP
UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信
目前视频通话,电话,广播等都是通过UDP传播方式,不需要保证不丢帧,但是要保证实时性
IP
网络之间互连的协议(IP)是 Internet Protocol 的外语缩写,IP 是在 TCP/IP 协议中网络层的主要协议,任务是仅仅根据源主机和目的主机的地址传送数据。为此目的,IP 定义了寻址方法和数据报的封装结构。第一个架构的主要版本,现在称为 IPv4,仍然是最主要的互联网协议,尽管世界各地正在积极部署 IPv6
IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC地址(Media Access Control Address)
IP: 节点被分配到的地址,ip地址可以变动
MAC:网卡所属的固定地址,MAC地址基本上不会更改
SOCKET
Socket(套接字),原本是由 BSD UNIX 开发,后被移植到了 Windows 的 Winsock 以及嵌入式操作系统中,目前被广泛用于在应用在使用 TCP 或 UDP通信时调用的api
应用程序利用套接字,可以设置对端的 IP 地址,端口号,并实现数据的发送与接收,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 Socket。
建立网络通信连接至少要一对端口号(Socket)。Socket 本质是编程接口(API),对 TCP/IP 的封装,TCP/IP 也要提供可供程序员做网络开发所用的接口,这就是 Socket 编程接口;HTTP 是轿车,提供了封装或者显示数据的具体形式;Socket 是发动机,提供了网络通信的能力
注:文章内容部分摘录于 https://blog.csdn.net/freekiteyu/article/details/72236734,文章内容按照作者本人理解排版记录,仅供学习与记录使用
|