计算机刚刚发明出来的时候,两台计算机之间是无法通信的,为了使计算机之间能够进行数据的交流,制定了OSI(Open SystemInterconnection)开放系统互联模型,而TCP/IP(我们所使用的)是在OSI之后发展而来的。

给大家画个OSI的参考模型:
我们可以把主机1和主机2看成是2个独立的网络。计算机之间的访问要经过复杂的层级关系,为什么要分成这么多得层级呢?肯定是为了方便开发,分散工作量,提高效率。
其中,网络层,数据链路层,物理层属于硬件。
物理层:主要制定物理设备的标准(比如:网线接口类型,各种传输介质的传输速率等),主要作用是传输比特流(由1、0转化为电流强弱来进行传输,到达目的地后再转化成1、0,也就是数模与模数转换)。这一层数据叫比特,主要设备:集线器
数据链路层:主要将物理层接收的数据进行MAC地址的封装和解封装。这一层数据叫帧,主要设备:网卡,交换机
网络层:选择合适的网间路由和交换结点,确保数据及时传送,将从下层接到的数据进行IP地址封装和解封装。这一层数据叫数据包,主要设备:路由器。
传输层:定义了一些传输数据的协议和端口,比如:TCP ,UDP协议,主要将下层接收的数据进行分段和传输,到达目的地址后再进行重组,这一层数据叫段。
会话层:通过传输层建立数据传输通路。在系统之间发起会话或者接受会话请求(设备间需要互相识别,交朋友)
表示层:主要进行对接受的数据进行解释、压缩和解压缩等,把计算机能够识别的动向转换成人能够识别的动向(比如图片、音乐、文字)
应用层:主要是终端的应用,(比如浏览器、QQ等)可以理解成在电脑屏幕看到的东西 ——终端应用。

理解了OSI参考模型,接下来看看TCP/IP参考模型和OSI有什么不同的地方:

从上面可以看出,TCP/IP参考模型将应用层、表示层和会话层归结为应用层;数据链路层和物理层归结为主机到网络层。为什么这样分呢?
实际上,我们现实的开发中就包括了应用层、表示层和会话层的工作,因为每个层都需要有“管理者”去管理,这样就加大了沟通成本,而简化后我们就只需要4个“管理者”进行管理,直接减少了沟通成本。
为了加深各位客官的理解,我们举个例子:我们平常上QQ需要发送消息,那发送消息在TCP/IP中的体现就如下图所示:

从图中可以看出,每到一个层级,会自动拼接层级标识,所以数据是不断增大的,而接受则反之。从物理层接受——直到应用层显示。
网络通讯要素
1. IP地址(网络设备唯一标识 )
* 网络中设备的标识
* 不易记忆,可用主机名
* 本地回环地址:127.0.0.1 主机名:localhost
2. 端口号(定位程序)
* 用于标识进程的逻辑地址,不同进程的标识
* 有效端口:0~65535,其中0~1024由系统使用或者保留端口,开发中不要使用1024以下端口
3. 传输协议(用什么样的方式进行交互)
* 通讯规则
* 常见协议:TCP、UDP
1> TCP(传输控制协议)   比如:QQ
* 建立连接,形成传输数据的通道
* 在连接中进行大数据传输(数据大小不受限制)
* 通过三次握手完成连接,可靠协议,安全送达
* 必须建立连接,效率稍低
2> UDP(用户数据报协议)   比如:短信
* 将数据及源和目的封装成数据包中,不需要建立连接
* 每个数据报的大小限制在64K之内
* 因为无需连接,因此不可靠协议
* 不需要建立连接,速度快
4. URL(统一资源定位)   
最基本的网络概念就先讲到这边,以后想到哪里再补充到哪里,如果有错误或者有什么问题可以联系我。
转载请注明出处,谢谢!

【网络编程】TCP/IP、UDP、网络概…的更多相关文章

  1. Socket网络编程(TCP/IP/端口/类)和实例

    Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次 ...

  2. 网络编程TCP/IP详解

    网络编程TCP/IP详解 1. 网络通信 中继器:信号放大器 集线器(hub):是中继器的一种形式,区别在于集线器能够提供多端口服务,多口中继器,每个数据包的发送都是以广播的形式进行的,容易阻塞网络. ...

  3. 网络知识--OSI七层网络与TCP/IP五层网络架构及二层/三层网络

    作为一个合格的运维人员,一定要熟悉掌握OSI七层网络和TCP/IP五层网络结构知识. 废话不多说!下面就逐一展开对这两个网络架构知识的说明:一.OSI七层网络协议OSI是Open System Int ...

  4. 网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络(转)

     reference:https://www.cnblogs.com/kevingrace/p/5909719.html https://www.cnblogs.com/awkflf11/p/9190 ...

  5. python 网络编程 TCP/IP socket UDP

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  6. Socket网络编程TCP、UDP演示样例

    Socket网络编程: 1) OSI(了解): 国际标准化组织ISO(International Orgnization for Standardization)指定了网络通信的模型:开放系统互联(O ...

  7. Python中的socket网络编程(TCP/IP,UDP)讲解

    在网络编程中的一个基本组件就是套接字(socket).套接字基本上是两个端点的程序之间的"信息通道".程序可能分布在不同的计算机上,通过套接字互相发送信息.套接字包括两个:服务器套 ...

  8. 网络编程TCP/IP实现客户端与客户端聊天

    一.TCP/IP协议 既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. TCP/I ...

  9. [网络编程] TCP、UDP区别以及TCP传输原理、拥塞避免、连接建立、连接释放总结

    TCP.UDP都是属于运输层的协议,提供端到端的进程之间的逻辑通信,而IP协议(网络层)是提供主机间的逻辑通信,应用层规定应用进程在通信时所遵循的协议.一.UDP主要特点:传输的是用户数据报协议.1. ...

  10. UNIX网络编程——TCP/IP简介

    一.ISO/OSI参考模型 OSI(open system interconnection)开放系统互联模型是由ISO(International Organization for Standardi ...

随机推荐

  1. tornado--SESSION框架,一致性hash,分布式存储

    预备知识 tornado框架session要自己写 cookie存储在客户端浏览器上,session数据放在服务器上 session依赖cookie 扩展tornado,返回请求前自定义session ...

  2. OpenStack虚拟云桌面在携程呼叫中心的应用

    编者:本文为刘科在第六期[携程技术微分享]中的分享内容.在携程技术中心(微信号ctriptech)微信后台回复[云桌面],可加入微信交流群,和关注云桌面的小伙伴一起玩耍~ 刘科,携程系统研发云平台桌面 ...

  3. 【转】jQuery中.bind() .live() .delegate() .on()的区别

    bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数 $("a").bind("click",function(){alert(& ...

  4. javascript设计模式实践之策略模式--输入验证

    策略模式中的策略就是一种算法或者业务规则,将这些策略作为函数进行封装,并向外提供统一的调用执行. 先定义一个简单的输入表单: <!DOCTYPE html> <html> &l ...

  5. 介绍开源的.net通信框架NetworkComms框架 源码分析(十八 ) ConnectionListenerBase

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  6. 精品干货丨APP常用导航框架

    文章目的:在整体上把握移动端App的导航框架,理解每种导航所具有的优点.局限性和其所适用的范围. 文章用心:典型APP案例(源码:http://www.jinhusns.com/Products/Do ...

  7. 孙鑫MFC学习笔记4:MFC画图

    1.画线方法 *1.捕获鼠标按下和弹起消息,获取两个点 *2.消息响应,画线 2.在CMainFrame类中的鼠标左键事件得不到响应的原因是CNameView覆盖了CMainFrame 3.注释宏 4 ...

  8. Focus

    在尘世中沉浸得越久,越无法集中精力去做好一件事. 缺乏学习!

  9. Oracle数据库,序列、索引、视图

    一.序列:生成自动增长(或减少)的整数值 Sequences中新建 调取: th_test.nextval 获取下一个值 th_test. currval获取当前值 二.视图:在物理表的基础上定义的虚 ...

  10. GJM: Unity3D AssetBundle 手记 [转载]

    这篇文章从AssetBundle的打包,使用,管理以及内存占用各个方面进行了比较全面的分析,对AssetBundle使用过程中的一些坑进行填补指引以及喷!   AssetBundle是Unity推荐的 ...