Python学习之——Tcp/ip基础/IP地址/DNS/端口简介

Posted 葫芦七娃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习之——Tcp/ip基础/IP地址/DNS/端口简介相关的知识,希望对你有一定的参考价值。

一.为什么需要tcp/ip,什么是tcp/ip?

  TCP/IP协议,即Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。【百度百科】

  在这之前,很多厂商生产各种型号的计算机,他们运行完全不同的操作系统,但TCP/ip协议族允许他们互相进行通信,TCP/IP起源于60年代末美国政府资助的一个分组交换网络的研究项目,到90年代已经发展成为计算机之间最常应用的组网形式,他是一个真正的开放系统,因为协议族的定义及其多种实现可以不用花钱或花很少的钱就可以公开的得到,他被成为‘全球互联网’或‘因特网’的基础。

  【本篇文章主要来源于  TCP/IP详解 卷一,若有对网络有深刻了解的请阅读TCP/IP详解 卷一、二、三】

二.工作原理之协议分层

  网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能,一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合,TCP/IP通常被认为是一个四层协议系统,如图:

每一层负责不同的功能:

1.链路层:

  链路层有时也被称为数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡,他们一起处理和电缆(或其他任何传输媒介)的物理接口细节

2.网络层:

  有时也被称为互联网层,处理分组在网络中的活动,例如分组的选择,在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)

3.传输层/运输层:

  传输层主要为两台主机上的应用程序提供端到端的通信,在TCP/IP协议族中,有两个户互不相同的传输协议:TCP协议(传输控制协议)和UDP(用户数据报协议)。

  TCP为两台主机提供高可靠性的数据通信,他所作的工作包括把应用程序交给他的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等,由于传输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有的这些细节

  而UDP则为应用层提供一种非常简单的服务,他只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能够到达另一端,任何必须的可靠性 必须由应用层来提供。

  这俩种传输层协议分别在不同的应用程序中有不同的用途。

4.应用层

  应用层负责处理特定的应用程序细节,几乎各种 不同的TCP/IP实现都会提供下面这些通用的应用程序:

  Telnet远程登录

  FTP文件传输协议

  SMTP简单邮件传送协议

  SNMP简单网络管理协议

 总结:

 

在这里简单举例FTP客户端与服务端之间的网络交流:

 

 三:互联网的地址:(注:只对V4版本说明,V6后续补)

  互联网上的每个接口必须有一个唯一的Internet地址(也叫IP地址),IP地址长32bit,采用点分十进制方法表示也就是说通常写成四个十进制的数,共分为五类,在具体描述时可理解为 网络位+主机位 组成了IP地址

 

 

  扩展:

    由于互联网上的每个接口必须有一个唯一的IP地址,因此必须要有一个管理机构为接入互联网的网络分配IP地址,这个管理机构就是互联网络信息中心(Internet Network Information Centre),称作InterNIC,InterNIC只分配网络号,主机号的分配由系统管理员负责

  事实上InterNIC由三部分组成:注册服务,目录和数据库服务,以及信息服务

  有三类IP地址:单播地址,广播地址和组播地址

 

四:端口号

  端口号常见于计算机网络应用中,用于网络设备之间的链接。在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用 于连接其他网络设备的接口,如RJ-45端口、SC端口等等。二是逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。

  那么TCP/IP协议中的端口指的是什么呢?如果把IP地址比作一间房子 ,端口就是出入这间房子的门。端口号就是打开门的钥匙。真正的房子只有几个门,但是一个IP地址的端口 可以有65536个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535。

  一台拥有IP地址的主机可以提供许多服务,比如web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区 分不同的服务的。

  端口号区分:

    到1992年为止:知名端口号1~255之间,256~1023之间的端口号通常是Unix系统占用,以提供一些特定的Unix服务,然而客户端对它所用的端口号并不关心,只需要保证该端口号在本机上唯一就ok,大多数TCP/IP实现给临时端口分配1024~5000之间的端口号,大于5000的端口号是为其他服务器预留的,在internet上并不常用的服务。也有其他厂商称低于1024的端口为低位端口,称为知名端口,高于1024的端口称为高位端口,为其他使用。

 

  

五:域名系统(DNS)

  尽管通过IP地址可以识别主机上的网络接口,进而访问主机,但是人们最喜欢使用的还是主机名,在TCP/IP领域中,域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,由它来提供IP地址和主机名之间的映射信息。DNS提供可允许服务器和客户程序相互通信的协议。

  从应用的角度上看,对DNS的访问是通过一个地址解析器(r e s o l v e r)来完成的。在 U n i x
主机中,该解析器主要是通过两个库函数 g e t h o s t b y n a m e(3) 和g e t h o s t b y a d d r( 3 )来访问的,它们在编译应用程序时与应用程序连接在一起。前者接收主机名字返回 I P地址,而后者
接收I P地址来寻找主机名字。解析器通过一个或多个名字服务器来完成这种相互转换。

  DNS的名字空间和Unix的文件系统相似,也具有层析结构,如下图,每个结点(下图中的圆圈)有一个至多 6 3个字符长的标识。这颗树的树根是没有任何标识的特殊结点。命名标识中一律不区分大写和小写。命名树上任何一个结点的域名就是将从该结点到最高层的域名串连起来,中间使用一个点“.”分隔这些域名(注意这和 U n i x文件系统路径的形成不同,文件路径是由树根依次向下的形成的)。域名树中的每个结点必须有一个唯一的域名,但域名树中的不同结点可使用相同的标识。

 

注:顶级域被分为三个部分:

  1.arpa是一个用作地址到名字转换的特殊域

  2.7个3字符长的普通域,有些也称为组织域

  3.所有2字符长的域均是基于ISO3166中定义的国家代码,这些域被称为国家域或地理域

  4.全球共有13台根域服务器,由类似开源组织的人员维护,了解13台根域服务器请百度百科。

 

 

 

 

注:这只是一程序猿对对所学的一丁点见解,若有网络大神请绕行  :-D,有疑问请联系yuxiang000@foxmail.com

以上是关于Python学习之——Tcp/ip基础/IP地址/DNS/端口简介的主要内容,如果未能解决你的问题,请参考以下文章

python学习之复习整理

linux学习之网络

学习之http协议

python学习之day6——socket基础

Python模块学习之IPy模块

浅谈TCP IP协议栈IP协议解析