一、引子

        TCP/IP是“Transmission Control Protocol/Internet Protocol”的简写,翻译成中文为传输控制协议/互联网网络协议。TCP/IP是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据来往格式及传送方式。TCP/IP是Interent的基础协议,也是一种计算机数据打包和寻址的标准方法。

二、计算机网络概述

        计算机网络是指将地理位置不同的,具有独立功能的多台计算机及其他外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

        20世纪90年代后,以Internet为代表的计算机网络得到了迅猛发展,Internet成为世界上最大的计算机网络。Internet主要由主机,线路,交换,路由,调制解调器等设备组成。

        主机有不同的形式,主要分为两种:服务器和客户端。在Interent中提供服务的主机叫做服务器,比如各大门户网站,社交平台等;通过访问服务器从而获得有用信息的主机叫做客户端,比如各种家庭计算机和智能手机。

网络分层

        将数据从一个主机传输到另一个主机是一个复杂的过程,包括信息格式转换,分发,寻址,物理传输等,在这个过程中还要加入多种校验措施以保证传输的正确性。为了使这个过程利于设计并且向开发者隐匿网络细节,计算机网络被纵向分割为不同的层,每一层表示不同的抽象程序和设计目的。每一层的功能相互独立,这使得它们可以仅完成自己的任务,比如传输编码等。Internet是基于TCP/IP网络而搭建的,TCP/IP将网络分为4层结构,分别是应用层,传输层,网络层,接口层。

  • 应用层:Application Layer,为用户的进程直接提供服务,应用层负责发送及接受什么数据,如果解释数据,如何呈现数据,如何加密数据等问题,是网络应用程度开发者重点打交道的对象。例如HTTPS定义了网络间数据加密认证的标准方法,HTML定义了网页的解析方式等。

  • 传输层:Transport LAyer:为了两个主机的不同端口之间的通信提供服务。端口(Port)是一种在同一主机内的不同通道之间进行寻址的方式。传输层的发送方与接受方在物理上无须相邻。TCP/IP的传输层包括两种协议:TCP和UDP。TCP提供可靠的有序传输,UDP提供非可靠的传输。
  • 网络层:Network Layer,为两个主机之间提供通信服务。网络层定义了数据如何封装为传送报,并且定义了不同主机的寻址方式。主要由IP(Internet Protocal)组成,辅以ICMP,IGMP等路由协议
  • 接口层:Link Layer,负责相邻物理设备之间的信息传输。接口层的工作非常多且复杂,它需要完成接口层的数据组装(形成Frame),加入必要的控制和校验数据,并且将二进制数据流(0/1)转换为物理链路上的标准电平(高电平,低电平)。针对不同的物理传输介质,接口层定义了多套标准,并且这些标准,并且这些标准随着电子技术的进步一直发展,列如802.3、802.11等/

网络设备

        网络设备及部件是连接网络的物理实体。网络设备的种类繁多且与日俱增,网络设备特指Internet除主机外,仅起网络传输及数据交换作用的设备,具体有:集线器,交换机,网桥,路由器,网关,网络接口卡(NIC),无限接入点(WAP),调制解调器,光缆等。

  • 集线器:简称HUB,是接口层设备。集线器是网络互连的最简单设备,它接受并识别网络信号,然后再生信号并将其发送到网络的其他分支上。
  • 交换机:即Switcher,是接口层设备,也是网络互联中的最常用设备。它与集线器的差别是HUB本身不能识别目的的地址,而交换机可以。当同一局域网内的A主机向B主机传输数据时,数据包在经过UHB时在网络上以广播方式传输的,由每一台终端通过地址信息来确定数据包是否属于自己;数据包经过Switcher时,Switcher会根据Frame目的地址直接发送给B主机所在的链路。因此,在网络中用交换机替换集成线路通常能提高网络的整体性能。
  • 网桥:Bridge,是接口层设备。网桥通常同于物理异构的网络之间相互连接,列如以太网和令牌之间
  • 路由器:即Roouter,是网络层设备。路由器是互联网的主要结点设备,通过发送者,接受者IP地址和路由算法决定数据的收发路径,这一过程叫做Routing。
  • 网关:Gateway,是一个通用概念,主要指不同网络环境之间的协议转换,一般为应用层设备,比如一个专用于数据存储转发的服务器。
  • 调试解调器:即Modem,俗称“猫”,是接口层设备,用于连接计算机网络与传统通信网。Modem将计算机的数字信号转译成能够在常规电话线中传输的模拟信号。因为模拟信号道的传输距离更长,所以长距离的网络传输一般都需要经过Modem转接。常见的家用Modem包括56k猫,ADSL猫,光纤猫等。
  • 无线接入点:即Wireless Access Point,是接口层设备,将有线网络转为无线网络,最常用的无线接入点即WiFi。
  • 防火墙:即Firewall,是传输层及应用层的设备。防火墙通常位于不同网络的边界处,主要用于防止恶意程序及数据进入内部网络,或者防治机密信息泄露到广域网中。企业级网络通常用防火墙抵御违法入侵。

IP地址

        网络地址(Network Address)是一个网络层概念,是互联网上的主机在网络中具有的逻辑地址。Internent上采用IP地址表示网络地址。当前有两种形式的IP地址,即IPv4和IPv6.

        Ipv诞生于1982年,随着TCP/TP的发展壮大,缔造了当今的计算机网络通信模式。IP地址是一个32位二进制的地址,在表达方式上以4个十进制数字表示,比如172.16.32.3,10.38.96.243等。从理论上讲,有大约60亿(2的32次方)中可能的地址组合,这似乎是一个很大的地址空间。实际上,一个IPv4地址被划分两部分:网络地址和主机地址。根据网络地址和主机的不同位数规则,可以将IP地址分为A(8位网络ID和24位主机ID),B(16位网络ID和16位主机ID),C(24位网络ID和8位主机ID)3类,由于历史原因和技术发展的差异,A类地址和B类地址几乎分配已尽。

        由于IPv4的数据限制,IPv6应运而生。IPv6由128位二进制数组成,在表达方式上用8个16进制数字表示,比如等d23:4334:0:0:23:ade:9853:23.
单从数量级上来说,IPv6所拥有的地址容量约是IPv4的8x10^28倍,达到2^128个。这个不但解决了网络地址资源数量的问题,也位除计算机外的设备连入互联网在数量限制上扫清了障碍。然而让人遗憾的是,IPv6自1999年开始分配以来,并没有在互联网上得到广泛应用。目前互联网的主要地址表达方式及其调制仍主要以IPv
4为主,但IPv6必将会替代IPv4.

域名

        由于IP地址由纯数字组成,很难让人记忆,且不能表达功能,地址位置等附加含义,所以在TCP/IP网络形成不久,标准化组织就定义了域名这种主机地址表达方式。

        域名(Domain Name)是一个应用层概念,是由一串用点分隔的名字组成的Internet上某台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置,地理上的域名或有行政自主权的一个地方区域)。域名是一个IP地址的“面具”。一个域名是便于人们记忆和沟通的一组服务器的地址(网络,电子邮件,FTP等)。使用域名作为标记互联网计算机的名称已有30多年的历史,世界上第1个被注册的域名是在1985年1月被注册的。

        域名中的标号都由英文字母和数字组成,每个标号不超过63个字符,也不区分大小写字母。标号中除字符(-)外不能使用其他标点标号。级别最低的域名写在最左边,而级别最高的域名写在最右边。由多个标记组成的完整域名总共不超过255个字符。

URL

        为统一资源定位符,是用来表示Internet上资源位置的标准。资源位置包括资源所在的主机及其在主机内的访问路径。这里所说的资源是指Internet上任何可访问的对象,包括文本,图像,视频流等。URL的标准形式如下:

[协议://[主机]:[端口]/[路径]?[参数]]

        其中,【协议】可以是HTTP,FTP等应用层协议;【主机】是域名或IP地址;【端口】是传输层端口号;【路径】是以斜杠“/”分割的主机内的路径;【参数】是以“&”分割的若干键值对。

三、TCP和UDP

        TCP/IP的传输层是网络中承上启下的关键一层,向上对应用层提供通信服务,向下将应用信息封装为网络信息。传输层连接主机之间的进程,同一主机中不同进程的网络通信通过端口(port)进行区分。所以传输层为主机提供的是端口到端口的服务。

        TCP和UDP是Internet中传输层最重要的两种协议,由于开发者不可避免地要与传输层打交道;

端口

        所说的端口,不是计算机硬件的I/O端口,而是软件级的概念,就像IP地址是网络层的寻址方式,端口是传输层的寻址方式,端口是一个16位二进制数表达的正整数,数字范围为0-65535,即一个在网络上通信的主机理论上最多有65535个传输层信道。但由于在操作系统和一些应用中端口也被用作同一主机上不同进程之间的通信,所以通常可用的网络端口数量少于65535个。

        应用程序(调入内存运行后一般被称为进程)通过系统调用与某端口建立连接(Binding,绑定)后,传输层给该端口的数据都被相应的进程所接收,相应的进程发给传输层的数据都从该端口输出。由于TCP/IP传输层的TCP和UDP是两个完全独立的软件模块,因此各自的端口号也相互独立。

        注意:TCP和UDP可以在同一主机上使用相同的端口而互不干扰。列如TCP有个53号端口,UDP也可以有个53号端口,两者并不冲突。

TCP

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的,可靠的,基于字节流的传输层通信协议,由IETF的的RFC793定义。当应用层向TCP层发送用于网间传输的用8位字节表示的数据流时,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受计算机连接的网络的数据链路层的最大传送单元(MTU)限制;

TCP标志位:

  • SYN(synchronous),建立联机。
  • ACK(acknowledgement),确认。
  • PSH(push),传输。
  • FIN(finish),结束。
  • RST(reset),重置。
  • URG(urgent),紧急。

三次握手建立连接阐述:

第一次握手:客户端要和服务端进行通信,首先要告知服务端一声,遂发出一个SYN=1的连接请求信号,”服务端哥哥,我想给你说说话”。

第二次握手:当服务端接收到客户端的连接请求,此时要给客户端一个确认信息,”我知道了(ACK),我这边已经准备好了,你现在能连吗(SYN)”。

第三次握手:当客户端收到了服务端的确认连接信息后,要礼貌的告知一下服务端,“好的,咱们开始联通吧(ACK)”。

到此整个建立连接的过程已经结束,接下来就是双方你一句我一句甚至同时交流传递信息的过程了。

四次挥手断开连接阐述:

第一次挥手:双方交流的差不多了,此时客户端也已经结尾了,接下来要断开通信连接,所以告诉服务端“我说完了(FIN)”,此时自身形成等待结束连接的状态。

第二次挥手:服务端知道客户端已经没话说了,服务端此时还有两句心里话要给客户端说,“我知道你说完了(ACK),我再给你说两句,&*……%¥”。

第三次挥手:此时客户端洗耳恭听继续处于等待结束的状态,服务器端也说完了,自身此时处于等待关闭连接的状态,并对告诉客户端,“我说完了,咱们断了吧(FIN)”。

第四次挥手:客户端收知道服务端也说完了,也要告诉服务端一声(ACK),因为连接和断开要双方都按下关闭操作才能断开,客户端同时又为自己定义一个定时器,因为不知道刚才说的这句话能不能准确到达服务端(网络不稳定或者其他因素引起的网络原因),默认时间定为两个通信的最大时间之和,超出这个时间就默认服务器端已经接收到了自己的确认信息,此时客户端就关闭自身连接,服务器端一旦接收到客户端发来的确定通知就立刻关闭服务器端的连接。

到此为止双方整个通信过程就此终结。这里要声明一下:断开链接不一定就是客户端,谁都可以先发起断开指令,另外客户端和服务端是没有固定标准的,谁先发起请求谁就是客户端。

UDP

        UDP(User DataGram Protocol)是一种无连接的传输层协议,提供面向事物的简单的不可靠消息传输服务,IETF RFC768是UDP的正式规范。UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销小,因此UDP能提供更快速,轻量级的传输层控制。总结UDP特性如下:

  • 数据可以随时发送,接收,没有建立,断开连接的过程,因此主机不需要维护复杂的连接状态。
  • UDP不保证数据的可靠传输,仅仅尽最大可能进行发送。
  • 没有拥塞控制算法控制收发速率,程序需在应用层自行空难址。
  • 发送方的UDP对应程序交互的报文,在添加首部后向交付给IP层,即不拆分,也不合并。因此,应用程序需要选择合适的报文大小。

        由此,不难总结出UDP协议适用的应用场景:吞吐量大(因为只做轻量级控制),可以承受信息丢失(因为传输不可靠)。在网络状况良好的情况下,UDP的丢包率在实际下也非常少,所以仍有很多经典协议采用UDP进行传输,比如SNMP,NFS,DNS,BOOTP等。

四、C/S及B/S架构

        C/S,即Client/Server,是当前大多数网络编程所使用的架构模型。通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通信开销。Client和Server常常分别处在相距很远的两个计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。

        B/S,即Browser/Server,是Web兴起后的一种网络结构模式。B/S使用Web浏览器作为客户端的应用软件,所以B/S可以看做C/S的一种特殊情况。B/S架构是伴随因特网的兴起而兴起的,是对C/S结构的一种改进,它的主要特点如下:

  • 便于部署,维护与升级:随着社会生活节奏的日益加快,主流企业的软件开发流程与方法也从传统瀑布模型转为迭代式敏捷开发。软件系统的改进与升级节奏的加快对系统的快速部署,升级提出了很高的要求。B/S架构的产生明显体现着更为方便的特性,因为B/S系统的所有应用程序的部署在服务器上你,而一般无须更新客户端软件(即浏览器)。
  • 跨平台,开放,对客户端要求低:客户端计算机的软硬件环境千差万别,虽然大多数是Windows系统,但近年来MAC操作系统也越来越普及,另外有少数钟情于Linux的用户。传统的C/S架构需要针对每种操作系统开发相应的客户端程序;而因为每种操作系统都支持Web浏览器,所以基于B/S架构的系统只需开发一套客户端程序。B/S架构的客户端程序部署在服务端,由浏览器在访问时下载到客户端运行。
  • 对安全性的要求较高:由开发性而延伸的一个负面作用就是B/S架构对系统安全性的要求系统时应该加关注系统的防攻击,数据加密,备份,防伪造等能力。

TCP/IP 网路基础的更多相关文章

  1. TCP/IP协议基础(转)

    转自 http://www.chinaunix.net 作者:Bernardus160  发表于:2003-12-03 17:33:15 TCP/IP协议基础 -------------------- ...

  2. (转) HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手、TCP/IP协议基础、加密学)

    HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手.TCP/IP协议基础.加密学) 原文:http://blog.csdn.net/itermeng/article/detai ...

  3. [转]TCP/IP 协议基础(一)

    参考书籍为<图解tcp/ip>-第五版.这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述).OSI参考模型.网络概念的本质.网络构建的设备等 ...

  4. 《Unix网络编程》卷一(简介TCP/IP、基础套接字编程)

    通常说函数返回某个错误值,实际上是函数返回值为-1,而全局变量errno被置为指定的常值(即称函数返回这个错误值). exit终止进程,Unix在一个进程终止时总是关闭该进程所有打开的描述符. TCP ...

  5. TCP/IP协议栈基础知识

    设计思想 把一个复杂的事物进行分层划分,使得每个部分变得相对简单 分层模型 OSI分为7层模型   tcp/ip分为四层模型 应用层(Application) 传输层(Transport) 网络层(I ...

  6. TCP/IP网路协议复习

    1.OSI (Open System Interconnect Protocol) 开放互联协议,这是一个七层的计算机网络协议,包括:物理层.数据链路层.网络层.传输层.回话层.表示层.应用层.    ...

  7. OSI模型与TCP/IP模型基础

    一.OSI七层模型 OSI(Open System Interconnection),OSI是一个开放性的通行系统互连参考模型,是一个协议规范.OSI七层模型是一种框架性的设计方法 ,建立七层模型的主 ...

  8. TCP/IP网络基础知识

    TCP/IP是一组用于实现网络互联的通信协议,通常称为TCP/IP协议族.包括TCP.IP.UDP.ICMP.RIP.TELNETFTP.SMTP.ARP.TFTP等. 一.TCP/IP模型将协议分为 ...

  9. 第 36 章 TCP/IP协议基础

    问题一:为什么要有缓存表?为什么表项要有过期时间而不是一直有效 1.参考网址: 1)网络——ARP协议 2)linux arp机制解析 2.解答: 2.1 ARP缓存可以减小广播量,当主机发送一个AR ...

随机推荐

  1. 关于python线程池threadpool

    #coding=utf-8 import time import threadpool def wait_time(n): print('%d\n' % n) time.sleep(2) #在线程池中 ...

  2. jenkins持续集成工作原理

    转载https://www.cnblogs.com/liyuanhong/p/6548925.html 片段 这里是选择Gitlab作为git server.Gitlab的功能和Github差不多,但 ...

  3. linux 常用进程使用命令

    查看进程占用pid ps aux | grep program_filter_word 杀死pid kill -

  4. MFC文档应用程序CToolBar:设置两个工具条并列停靠到同一条边上 转

    转自:http://blog.csdn.net/panshiqu/article/details/9369891# 将多个工具条同时并列停靠在某窗口的某一条边上.对于这种停靠方法,利用上述工具条控制函 ...

  5. SSAS中CUBE的多对多关系既可以出现在中间事实表上也可以出现在中间维度表上

    开发过SSAS中CUBE的朋友,肯定都知道维度用法中的多对多关系, 这篇文章不想详细阐述多对多关系在CUBE中的结构,详情请在网上寻找CUBE多对多关系的介绍资料. 下面是是一个典型的CUBE中多对多 ...

  6. 解决apache启动错误:Could not reliably determine the server's fully qualified domain name

    启动apache遇到错误:httpd: Could not reliably determine the server's fully qualified domain name [root@serv ...

  7. [原创]HBase学习笔记(2)- 基本操作

    1.使用hbase shell连接hbase 2.输入help可以查看帮助 3.输入list查看当前hbase中的所有表 4.使用create创建表test 其中test是表名,cf是列族.该表只创建 ...

  8. iOS-截取TableView生成图片

    先看一下实例效果: 如果所示,这是一个在APP中截图,并调起微信客户端,发送给好友的例子,图片就是一个tableView的截图. 先实现一个小例子,如果tableVIew里面的内容,没有超过当前屏幕显 ...

  9. 深入理解java虚拟机读后总结

    之前看过,很多会遗忘,标记一下,温故知新.(明天的我一定会感谢现在努力的自己. ) 一.运行时数据区域 Java虚拟机管理的内存包括几个运行时数据内存:方法区.虚拟机栈.本地方法栈.堆.程序计数器,其 ...

  10. 在angular7中创建组件/自定义指令/管道

    在angular7中创建组件/自定义指令/管道 组件 使用命令创建组件 创建组件的命令:ng generate component 组件名 生成的组件组成: 组件名.html .组件名.ts.组件名. ...