计算机网络分层 OSI:
OSI 模型(Open System Interconnection model)是一个由国际标准化组织提出的概念模型,试图提供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架。
它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的接口。了解 OSI 模型有助于理解实际上互联网络的工业标准——TCP/IP 协议。
七层模型介绍
-
应用层 OSI 的应用层协议包括文件的传输、访问及管理协议(FTAM) ,以及文件虚拟终端协议(VIP)和公用管理系统信息(CMIP)等;规定数据的传输协议;
-
表示层 可以理解为:解决不同系统之间的通信,eg:Linux下的QQ和Windows下的QQ可以通信;
-
会话层 建立一个连接(自动的手机信息、自动的网络寻址);
-
传输层 每一个应用程序都会在网卡注册一个端口号,该层就是端口与端口的通信!常用的(TCP/IP)协议;
-
网络层 网络层负责在源和终点之间建立连接;可以理解为,此处需要确定计算机的位置,怎么确定?IPv4,IPv6!
-
数据链路层 规定了0和1的分包形式,确定了网络数据包的形式
-
物理层 物理层负责最后将信息编码成电流脉冲或其它信号用于网上传输;
四层模型
-
网络接口层
网络接口层包括用于协作IP数据在已有网络介质上传输的协议。
它定义像地址解析协议(Address Resolution Protocol,ARP)这样的协议,提供 TCP/IP 协议的数据结构和实际物理硬件之间的接口。
可以理解为:确定了网络数据包的形式。 -
网间层
网间层对应于 OSI 七层参考模型的网络层,本层包含 IP 协议、RIP 协议(Routing Information Protocol,路由信息协议),负责数据的包装、寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol,ICMP)用来提供网络诊断信息;
可以理解为:该层时确定计算机的位置。 -
传输层
传输层对应于 OSI 七层参考模型的传输层,它提供两种端到端的通信服务。其中 TCP 协议(Transmission Control Protocol)提供可靠的数据流运输服务,UDP 协议(Use Datagram Protocol)提供不可靠的用户数据报服务。
TCP:三次握手、四次挥手;UDP:只发不管别人收不收得到--任性哈 -
应用层
应用层对应于 OSI 七层参考模型的应用层和表达层;
不明白的再看看7层参考模型的描述。
TCP/IP 协议族常用协议
应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
传输层:TCP,UDP
网络层:IP,ICMP,OSPF,EIGRP,IGMP
数据链路层:SLIP,CSLIP,PPP,MTU
TCP 协议
TCP的特点
- TCP 是面向连接的传输层协议
- TCP 连接是点到点的
- TCP 提供可靠交付的服务
- TCP 提供全双工通信
- 面向字节流
TCP 与 UDP 区别
属性 | TCP | UDP |
---|---|---|
是否连接 | 面向连接 | 面向非连接 |
传输可靠性 | 可靠 | 不可靠 |
应用场合 | 传输大量数据 | 传输少量数据 |
传输速度 | 慢 | 快 |
基本概念
-
发送缓存和接受缓存:用来临时保存双向通信的数据。在发送时,应用程序将数据传送给TCP发送缓存后,就可以做自己的事情,TCP在合适的时候发送数据;在接受数据时,TCP把发送的数据放入缓存,上层应用在合适的时候读取缓存即可。
-
滑动窗口:TCP的滑动窗口以字节为单位,用3个指针进行表示。当窗口内连续报文段被确认收到后,可以将窗口向前滑动。窗口大小应小于等于缓存区的大小。
-
滑动窗口协议:只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。
三次握手
-
第一次握手:建立连接时,客户端发送 syn(syn= j) 包到服务器,并进入 SYN_SENT 状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
-
第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack = j+1),同时也发送一个 SYN(syn = k)包到客户端,此时发送的是 SYN+ ACK包,此时服务器进入 SYN_RECV 状态;
-
第三次握手:客户端收到服务器的 syn +ack 包,向服务器发送确认包 ack (ack = k +1)包到服务端,此包发送完毕,客户端和服务器进入 ESTABLISHED ( TCP 连接成功)状态,完成三次握手。
四次挥手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。
-
客户端 A 发送一个 FIN ,用来关闭客户端 A 向服务器 B 数据传送(报文段4)
-
服务器 B 收到这个 FIN,它发回一个 ACK ,确认序号为收到的序号加一(报文段5)。和 SYN 一样,每个 FIN 将占用一个序号。
-
服务器 B 关闭与客户端 A 的连接,发送一个 FIN 给客户端 A(报文段 6)。
-
客户端 A 发回 ACK 报文确认,并将确认序号设置为收到序号加一(报文段7),此时完成四次挥手。
TCP采用四次挥手关闭连接如图所示为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以未必会马上关闭SOCKET,即你可能还需要发送一些数据给对方,之后再发送FIN报文来表示你同意现在关闭连接了,由此可见这里的ACK报文和FIN报文多数情况下都是分开发送的。
网友评论