计算机网络TCP/IP

DNS    域名解析类协议

DNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务,可以简单地理解为将URL转换为IP地址。

域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,在Internet上域名与IP地址之间是一一对应的,DNS就是进行域名解析的服务器。

DNS的组成

1,域名空间和资源记录
2,域名服务器
3,解析器

域名空间(Name Space):
COM  商业组织
EDU  教育机构
GOV  政府机构
MIL  军事单位
NET  提供网络服务的单位
ORG  非赢利性组织
INT  国际组织
ARPA  由ARPANET沿留的名称国家名称

域名空间的每一个节点包含一系列的资源信息:一条资源记录共有5项,分别是域名(Domain_name)、生存时间(Time_to_live)、类型(Type)、类别(Class)和值(Value)

域名服务器:用以提供域名空间结构及信息的服务器程序,LINUX默认是BIND,提供域名解析服务。

域名服务器分类:
1.根(root)服务器
    由NIC来维护
2.主域名服务器(Primary Servers)
负责一个域的名称解析,通常为一个
3.辅助域名服务器(Secondary Servers)
域的冗余和备份
4.专用缓存域名服务器(Cache-only Servers)
缓存非授权的DNS信息
5.转发域名服务器(Forwarding Servers)

解析器:应客户程序的要求从名字服务器中抽取信息。




SNMP:简单网络管理协议,用来对通信线路进行管理,其目标是管理互联网上的软硬件平台。
管理信息结构SMI
管理信息库MIB
SNMP通信协议

SMI(Structure of management information)是一种语言,主要定义了被管理网络实体中特定数据的数据类型、对象模型以及写入和修改管理信息的规则。

MIB是支持SNMP设备必须的一个管理信息数据库,并由代理程序进行维护。每个MIB对象都用OID值来进行标示,类似于文件系统中的全路径表示方法,每一个节点的值都是唯一的。
例如:mgmt\mib-2\system\sysDescr 用OID值可表示为以下几种形式:
1、“mgmt\mib-2\system\sysDescr”是纯名称的表示方法。
2、“2.1.1.1”是纯数字表示方法。
3、“mgmt.mib-2.1.1”“mgmt.1.1.sysDescr”等是混合表示方法


SNMP通信协议:主要是管理程序和代理程序之间通信,共有五类消息:GetRequest,GetNextRequest,GetResponse,SetRequest,Trap,其模型如下。



SNMPV1通信协议:主要定义了四类命令:GET、GETNEXT、SET、TRAP
GET:查询某一个指定OID的的MIB变量的当前值。
GETNEXT:查询代理程序指定OID的MIB变量中下一个值的当前值。
SET:设置指定OID的MIB变量的当前值。
TRAP:设备代理程序对预设的报警或关键值采用中断方式主动向管理程序回报。


传输层

UDP和TCP
UDP(User Datagram Protocol,用户数据报协议)是面向无连接的,即在进行数据传输之前不需要建立连接,而目的主机收到数据报后也不需要发回确认。这种协议提供了一种高效的传输服务。
TCP(Transmission Control Protocol,传输控制协议)是面向连接的,即在进行数据传输之前需要先建立连接,而且目的主机收到数据报后要发回确认信息。这种协议提供了一种可靠的传输服务。




TCP/IP传输层可以通过协议端口(protocolport,简称端口)来标识通信的应用进程。
例如:HTTP80
DHCP67、68

如果把IP地址比作一间房子,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有65536个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0到65535。

端口概念
1.网络互连层的IP协议将数据传送到传输层后,传输协议要将数据传递给正确的应用进程,为了识别是哪一个进程,就需要使用端口号。
2.在网络通信中有一种软件端口,它并不是物理意义上的端口,而是特指TCP/IP协议中的端口,是逻辑意义上的端口。
3.每个应用程序,不管是服务器还是客户端,都有一个唯一的端口号,或者作为源端口号,或者作为目的端端口号。
4.一个端口是一个16位号码,范围为1~65536
5.端口将应用进程与IP网络相关联,是应用进程的地址标识

TCP/IP协议中的端口功能介绍:
一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,一台主机上面有这么多服务,那我们跟这台主机进行联机时,该主机怎么知道我们要的数据是www还是FTP呢?这就是端口不同的结果,因为每种客户端软件所需要的数据都不相同,例如IE浏览器所需要的数据是www,所以该软件预设就会向服务器主机的80端口索求数据;而如果用户使用的是FlashGet(网际快车),来进行与服务器主机的FTP索求数据时,FlashGet这个客户端软件当然预设就是向服务器主机的FTP相关端口(默认的是21端口)进行连接,这样各种软件就可以正确无误的取得各自所需要的数据了。

端口并不是一一对应的

与IP地址一样,端口号也不是随意使用的,而是按照一定的规定进行分配。端口的分类标准有好多种,这里只介绍一下公用端口和动态端口。
公认端口:属于标准服务器,由权威机构IANA统一分配,从1~1023。
动态端口:用于客户,从1024~65535。

常见公认服务(程序)端口号:


动态端口(Dynamic Ports)
动态端口的范围是从1024到65535。之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配。动态分配是指当一个系统进程或应用程序进程需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。当这个进程关闭时,同时也就释放了所占用的端口号。

如果根据所提供的服务方式的不同,端口可分为“TCP协议端口”和“UDP协议端口”两种。由于TCP和UDP两个协议是独立的,因此各自的端口号也相互独立,比如TCP有235端口,UDP也可以有235端口,两者并不冲突。


默认的情况下,有很多不安全的或没有什么用的端口是开启的,比如Telnet服务的23端口、FTP服务的21端口、SMTP服务的25端口、RPC服务的135端口等等。为了保证系统的安全性,我们需要限制一些端口的开放。
案例:
你的电脑是一台服务器,服务器需要有Mail Server和WEB服务,还要有FTP服务,这些只需要开放21、25、80、110就足够了,其它的就应该全部关闭。


套接字Socket

源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。




TCP 连接::= {socket1, socket2}
= {(IP1: port1), (IP2: port2)}
每一条TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定。
TCP 连接(端到端)的端点不是主机,不是主机的IP 地址,不是应用进程,也不是传输层的协议端口。而是一对套接字(socket)。
UDP协议,虽然在进行通信的进程间不需要建立连接,但是在每次传输数据时,都要给出发送端口和接收端口,因此同样也要使用套接字。

Socket应用的基本步骤:
(1)服务器端socket绑定(bind)于特定端口,侦听(listen)连接请求
(2)客户端向服务器和特定端口提交连接请求(connect)
(3)服务器接受连接,产生一个新的socket,绑定到另一端口,由此socket来处理和客户端的交互;服务器继续侦听原socket来接受其他客户端的连接请求
(4)连接成功后客户端也产生一socket,并通过它来与服务器端通讯(注意:客户端socket并不与特定端口绑定)
(5)服务器端和客户端通过读取(recv)和写入(send)各自的socket来进行通讯

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。


通信是全双工方式。   一对一


TCP是面向连接的通信协议,通过三次握手建立连接;
通讯完成时要通过四次挥手拆除连接;



注:seq:"sequance"序列号;ack:"acknowledge"确认号;SYN:"synchronize"请求同步标志;;ACK:"acknowledge"确认标志";FIN:"Finally"结束标志。


TCP连接建立过程:首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。


TCP连接断开过程:假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待一段时间后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!



猜你喜欢

转载自blog.csdn.net/lvxiaojiahuo/article/details/79809084