天网搜索
⽹络协议学习有感(TCPIP)SNMP
近⼏天在⽹上学习了有关tcp/ip和snmp的有关内容,做了⼀个思维导图还有⼀些总结。
⼀、计算机⽹络体系结构分层
⾸先来看下计算机⽹路的分层
(OSI七层模型) (TCP/IP分层)
在两种分层中,OSI 参考模型注重“通信协议必要的功能是什么”,⽽ TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。⼆、TCP/IP 基础
测量空间
从字⾯意义上讲,有⼈可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际⽣活当中有时也确实就是指这两种协议。然⽽在很多情况下,它只是利⽤ IP 进⾏通信时所必须⽤到的协议的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于TCP/IP 协议。他们与 TCP 或 IP 的关系紧密,是互联⽹必不可少的组成部分。TCP/IP ⼀词泛指这些协议,因此,有时也称 TCP/IP 为⽹际协议。
互联⽹进⾏通信时,需要相应的⽹络协议,TCP/IP 原本就是为使⽤互联⽹⽽开发制定的协议族。因此,互联⽹的协议就是
TCP/IP,TCP/IP 就是互联⽹的协议
包可以说是全能性术语;
帧⽤于表⽰数据链路层中包的单位;
数据包是 IP 和 UDP 等⽹络层以上的分层中包的单位;
段则表⽰ TCP 数据流中的信息;
消息是指应⽤协议中数据的单位。
3.数据处理流程
① 应⽤程序处理
⾸先应⽤程序会进⾏编码处理,这些编码相当于 OSI 的表⽰层功能;
编码转化后,邮件不⼀定马上被发送出去,这种何时建⽴通信连接何时发送数据的管理功能,相当于 OSI 的会话层功能。 ② TCP 模块的处理
TCP 根据应⽤的指⽰,负责建⽴连接、发送数据以及断开连接。TCP 提供将应⽤层发来的数据顺利发送⾄对端的可靠传输。为了实现这⼀功能,需要在应⽤层数据的前端附加⼀个 TCP ⾸部。
③ IP 模块的处理
IP 将 TCP 传过来的 TCP ⾸部和 TCP 数据合起来当做⾃⼰的数据,并在 TCP ⾸部的前端加上⾃⼰的 IP ⾸部。IP 包⽣成后,参考路由控制表决定接受此 IP 包的路由或主机。
④ ⽹络接⼝(以太⽹驱动)的处理
从 IP 传过来的 IP 包对于以太⽹来说就是数据。给这些数据附加上以太⽹⾸部并进⾏发送处理,⽣成的以太⽹数据包将通过物理层传输给接收端。
⑤ ⽹络接⼝(以太⽹驱动)的处理
主机收到以太⽹包后,⾸先从以太⽹包⾸部到 MAC 地址判断是否为发送给⾃⼰的包,若不是则丢弃数据。
如果是发送给⾃⼰的包,则从以太⽹包⾸部中的类型确定数据类型,再传给相应的模块,如 IP、ARP 等。这⾥的例⼦则是 IP 。
⑥ IP 模块的处理
IP 模块接收到 数据后也做类似的处理。从包⾸部中判断此 IP 地址是否与⾃⼰的 IP 地址匹配,如果匹配则根据⾸部的协议类型将数据发送给对应的模块,如 TCP、UDP。这⾥的例⼦则是 TCP。
另外吗,对于有路由器的情况,接收端地址往往不是⾃⼰的地址,此时,需要借助路由控制表,在调查应该送往的主机或路由器之后再进⾏转发数据。
⑦ TCP 模块的处理
在 TCP 模块中,⾸先会计算⼀下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。***检查端⼝号,确定具体的应⽤程序。数据被完整地接收以后,会传给由端⼝号识别的应⽤程序。
⑧ 应⽤程序的处理
接收端应⽤程序会直接接收发送端发送的数据。通过解析数据,展⽰相应的内容。
三、传输层中的 TCP 和 UDP
1.TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。
TCP 是⾯向连接的、可靠的流协议。“顺序控制”“重发控制”“流量控制”、“拥塞控制”。
UDP 不提供复杂的控制机制,利⽤ IP 提供⾯向⽆连接的通信服务是不具有可靠性的数据报协议,数据细节处理交给上层。确保消息的⼤⼩,但不⼀定会到达。(传输过程中丢失不负责重发处理,交给UDP应⽤程序处理)
2.端⼝号
数据链路和 IP 中的地址,分别指的是 MAC 地址和 IP 地址。前者⽤来识别同⼀链路中不同的计算机,后者⽤来识别 TCP/IP ⽹络中互连的主机和路由器。在传输层也有这种类似于地址的概念,那就是端⼝号。端⼝号⽤来识别同⼀台计算机中进⾏通信的不同应⽤程序。因此,它也被称为程序地址。
2.1根据端⼝号识别应⽤
⼀台计算机上同时可以运⾏多个程序。传输层协议正是利⽤这些端⼝号识别本机中正在进⾏通信的应⽤程序,并准确地将数据传输。
壳体加工
交互式拼接屏
2.2 通过 IP 地址、端⼝号、协议号进⾏通信识别GOIP设备是什么意思
仅凭⽬标端⼝号识别某⼀个通信是远远不够的。
通过端⼝号、IP地址、协议号进⾏通信识别
① 和② 的通信是在两台计算机上进⾏的。它们的⽬标端⼝号相同,都是80。这⾥可以根据源端⼝号加以区分。
③ 和 ① 的⽬标端⼝号和源端⼝号完全相同,但它们各⾃的源 IP 地址不同。
此外,当 IP 地址和端⼝号全都⼀样时,我们还可以通过协议号来区分(TCP 和 UDP)。
防臭鞋垫3.UDP
UDP 不提供复杂的控制机制,利⽤ IP 提供⾯向⽆连接的通信服务。
并且它是将应⽤程序发来的数据在收到的那⼀刻,⽴即按照原样发送到⽹络上的⼀种机制。即使是出现⽹络拥堵的情况,UDP 也⽆法进⾏流量控制等避免⽹络拥塞⾏为。
此外,传输途中出现丢包,UDP 也不负责重发。
甚⾄当包的到达顺序出现乱序时也没有纠正的功能。
如果需要以上的细节控制,不得不交由采⽤ UDP 的应⽤程序去处理。
UDP 常⽤于⼀下⼏个⽅⾯:1.包总量较少的通信(DNS、SNMP等);2.视频、⾳频等多媒体通信(
即时通信);3.限定于 LAN 等特定⽹络中的应⽤通信;4.⼴播通信(⼴播、多播)。
4.三次握⼿(建⽴连接)
TCP 提供⾯向有连接的通信传输。⾯向有连接是指在数据通信开始之前先做好两端之间的准备⼯作。
所谓三次握⼿是指建⽴⼀个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建⽴。在socket编程中,这⼀过程由客户端执⾏connect来触发。 下⾯来看看三次握⼿的流程图:
SYN(synchronous建⽴联机)
ACK(acknowledgement 确认);
ack是期望对⽅继续发送的那个数据包的序列号。
seq是数据包本⾝的序列号
***次握⼿:客户端将标志位SYN置为1,随机产⽣⼀个值seq=J,并将该数据包发送给服务器端,客户端进⼊SYN_SENT状态,等待服务器端确认。
第⼆次握⼿:服务器端收到数据包后由标志位SYN=1知道客户端请求建⽴连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产⽣⼀个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进⼊SYN_RCVD状态。
第三次握⼿:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建⽴成功,客户端和服务器端进⼊ESTABLISHED状态,完成三次握⼿,随后客户端与服务器端之间可以开始传输数据了。
TCP 提供⾯向有连接的通信传输。⾯向有连接是指在数据通信开始之前先做好两端之间的准备⼯作。
所谓三次握⼿是指建⽴⼀个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建⽴。在socket编程中,这⼀过程由客户端执⾏connect来触发。
5.四次挥⼿(断开连接)
四次挥⼿即终⽌TCP连接,就是指断开⼀个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这⼀过程由客户端或服务端任⼀⽅执⾏close来触发。
由于TCP连接是全双⼯的,因此,每个⽅向都必须要单独进⾏关闭,这⼀原则是当⼀⽅完成数据发送任务后,发送⼀个FIN来终⽌这⼀⽅向的连接,收到⼀个FIN只是意味着这⼀⽅向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这⼀⽅向也发送了FIN。⾸先进⾏关闭的⼀⽅将执⾏主动关闭,⽽另⼀⽅则执⾏被动关闭。
下⾯来看看四次挥⼿的流程图:
中断连接端可以是客户端,也可以是服务器端。
***次挥⼿:客户端发送⼀个FIN=M,⽤来关闭客户端到服务器端的数据传送,客户端进⼊FIN_WAIT_1状态。意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。
第⼆次挥⼿:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。
这个时候客户端就进⼊FIN_WAIT_2 状态,继续等待服务器端的FIN报⽂。
第三次挥⼿:当服务器端确定数据已发送完成,则向客户端发送FIN=N报⽂,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进⼊LAST_ACK状态。
第四次挥⼿:客户端收到FIN=N报⽂后,就知道可以关闭连接了,但是他还是不相信⽹络,怕服务器端不知道要关闭,所以发送ack=N+1后进⼊TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握⼿。
上⾯是⼀⽅主动关闭,另⼀⽅被动关闭的情况,实际中还会出现同时发起主动关闭的情况。