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,有疑问请联系[email protected]

时间: 2024-11-10 07:40:14

Python学习之——Tcp/ip基础/IP地址/DNS/端口简介的相关文章

Day3: Python学习笔记之计算机基础——网络片

Day3: Python学习笔记之计算机基础--网络片 什么是互联网协议以及为何要有互联网协议? ?互联网协议本质上是为了方便连接两台计算机而指定的一系列统一的标准. osi五层模型 计算机之间要实现数据传输必须要经过以下五层协议: ? 模型 ,协议 ,硬件 ? 应用层, http协议.用户自定义协议 ? 传输层, TCP/UPD协议 ,四层交换机.四层路由器 ? 网络层, IP协议, 三层交换机.路由器 ? 数据链路层, 以太网.电信号分组, 网桥.以太网交换机.网卡 ? 物理层, 传递电信号

Python学习一:序列基础详解

作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7858473.html 邮箱:[email protected] 日期:2017-11-18 Python学习一:序列基础详解 一:序列介绍 Python中一些类型的变量,就像容器一样,收纳多个数据,序列就像一个有序的队伍,像整齐的万里长城,存储着各种各样的数据,他们按照一定的秩序排列在一起,很威武,很美观,所以说序列是有序的数据集合.序列包含的一

Python学习之旅—Django基础

前言  前段时间业务比较繁忙,没时间更新博客,从这周开始将继续为各位更新博客.本次分享的主题是Django的基础部分,涵盖Django MTV三部分,并通过一个简单的班级管理系统来说明如何使用Django进行开发,好啦,开始今天的主题吧! 一.浅谈MVC.MTV和MVVM 要学习Django,我们很有必要了解下MVC,MTV和MVVM三种模式. [001]MVC MVC(Model View Controller 模型-视图-控制器)是一种Web架构的模式(本文不讨论桌面应用的MVC),它把业务

Python学习第二天----网络基础及操作系统简介(安装linux系统)

一.操作系统 1.操作系统是一个协调.管理和控制计算机硬件资源和软件资源的控制程序,位于计算机软件与硬件之间,其实也是一款软件. 2.操作系统的组成:内核(运行于内核态为了管理硬件资源) 系统调用接口(运行于用户态为应用程序提供系统调用接口) 3.操作系统的功能:跟硬件衔接的部分隐藏了丑陋的硬件调用接口,为应用程序员提供了更好.更简单.更清晰的系统调用接口:跟应用程序衔接的部分封装了美丽的接口,将应用程序对硬件资源的竞态请求变得有序化 4.操作系统与普通软件的区别 操作系统由硬件保护,不能被用户

python学习之day6——socket基础

socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO.打开.关闭) socket和file的区别: file模块是针对某个指定文件进行[打开

python学习之网络编程基础

引入场景:客户与银行关系 银行职员负责给客户提供取钱服务,客户通过账户密码跟银行职员建立合作关系.此时银行职员就可以作为服务器,当用户A取完钱后他需要等待下一个用户的接入,用户的账号密码就是建立合作关系的凭据.------简单的客户端/服务器架构模型. 客户端/服务器网络编程过程 一:创建套接字(通信端点) AF_XXX解释:地址家族名称,AF:Address Family 基于文件套接字 AF_UNIX 基于网络套接字 AF_INET 代表ipv4  (python网络编程中常用的套接字)  

Python学习之路-Day1-Python基础

Python学习之路第一天 学习内容: 1.Python简介 2.安装 3.第一个Python程序 4.变量 5.字符编码 6.用户输入 7.表达式if..else语句 8.表达式for语句 9.break和continue 10.while循环 11.字符串格式化 1.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 最新的TIOB

Python学习笔记day1【基础介绍】

Alex博客:http://www.cnblogs.com/alex3714/articles/5465198.html 一.本节主要内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc文件 数据类型初识 数据运算 表达式if ...else语句 表达式for 循环 break and continue 表达式while 循环 作业需求 二.具体内容 1.python介绍 python的创始人为吉多·范罗苏姆(Guid

python学习-使用requests模块查询ip地址

思路是,使用requests模块调用阿里的ip接口查询ip归属地 关于requests模块的使用,可以查询相关文档,很强大,本次不做描述 #!/usr/bin/python #coding=utf-8 import requests   def checkip(ip):       URL = 'http://ip.taobao.com/service/getIpInfo.php'     try:         r = requests.get(URL, params=ip, timeout