协议系列之TCP/IP协议
根据前面介绍的几种协议,将IP协议、TCP协议、UDP协议组合起来,于是便有了TCP/IP协议。现在很多的应用的通信都是建立在TCP/IP协议的基础上,运用非常广泛,很有必要对其学习一下。
打个不太恰当的比方,TCP/IP协议可以看成是邮局与邮递员的关系(实际TCP/IP协议族会包含四层,应用层、传输层、网络层、链路层)。这个协议族中的IP协议定位到哪台计算机,而具体到这台计算机的哪个端口(应用程序)就需要TCP协议,一个属于网络层,一个属于传输层,互相依赖,提供有效的解决通信问题的措施。这就好比在90年代,你写一封情书给你远方的情人,情书先从寄出邮局被送往目的地邮局,接着当地可爱的邮递员把情书送给你的情人同志手上,你俩感情得到升温。
图2-2-5-1,TCP/IP协议其实还包含了UDP协议,即由TCP、IP、UDP三个协议组成。此图展示了TCP/IP协议的通信模型,左边是主机A,通过通信信道(一般是以太网)跟主机B进行通信。假设主机A的应用程序要发送数据到主机B的应用程序,主机A的应用程序会通过socket的API访问TCP协议、UDP协议提供的服务,再通过IP协议,利用TCP/IP协议以通信信道为介质与主机B建立起连接,传送到主机B的数据依次经过IP协议层、TCP协议层,被主机B的应用程序接收。
图2-2-5-1 TCP/IP通信模型
这里四层中每一层的功能都不一样。应用层主要发送用户的应用数据,由系统调用交给运输层处理;运输层负责建立连接,分割数据发送,释放连接,数据重组及错误处理;网络层负责确定将数据发送到哪个路由。链路层主要是对二进制用户数据进行传输校验。下面从不同角度来说明每个层次的区别:
(1) 运行进程态。应用层运行在用户程序进程中,属于用户态;其它三层运行在系统内核进程,属于核心态。
(2) 通信方式。传输层是进程与进程之间的通信,是端对端的;网络层是机器与机器之间的通信,是点对点的。
(3) 传输数据单元。传输层上是TCP或UDP报文段;网络层上是IP数据报文;数据链路层是帧数据。
(4) 寻址方式。网络层通过IP寻址;链路层通过MAC寻址(传输层通过端口寻址;一般而言MAC地址是世界唯一的、不变的,计算机通信其实是靠MAC地址,而非IP地址,但MAC地址不能变,不灵活,所以应用层用IP进行寻址)。
以图2-2-5-1,分解这四层数据传输的流程:
① 主机A的应用层组织好数据,发给传输层,并调用系统API通知TCP建立连接。
② 主机A传输层接收应用层数据,组织好TCP报文,发送给网络层,进行连接建立,其中会加上目标跟源端口。
③ 主机A网络层接收传输层TCP数据,组织好IP报文,发送给链路层,其中会加上目标跟源IP地址。
④ 链路层接收网络层数据,组装好链路报文,其中会加上MAC地址。
⑤ 链路数据由网卡发送,根据目标IP找到最近的路由器的MAC地址,将数据包发往它,由它确定下一个路由,最终将数据包发送到主机B的网卡。
⑥ 主机B的网络层获取IP数据包,根据IP协议拆包。
⑦ 主机B的传输层获取TCP数据包,根据TCP协议拆包。
⑧ 主机B应用层获取TCP拆包后的数据包进行解析,完成相应的业务逻辑处理。
在这四个层中,数据报文的的变化可以简单用图2-2-5-2表示,应用层的数据到达传输层后,会被TCP协议打包数据(此图假设使用TCP协议),这是会添加一个TCP头部报文,而应用层数据被封装成TCP报文体。继续往下到网络层,TCP报文又被IP协议打包,这时添加了一个IP头部报文,整个TCP报文被封装成IP报文体。最后到达链路层,IP报文被链路相关协议打包,这时添加了帧头部报文和帧尾部报文,整个IP报文被封装成链路协议的报文体。
图2-2-5-2 TCP/IP四层数据的封装
对于我们研究服务器,需要对传输层与网络层的报文比较深入理解,下面以一个更加详细的图对传输过程中TCP与IP报文组合进行说明。根据TCP缓冲大小,会被分成一个个TCP分段,每个分段都由IP分组与TCP段组成。在前几章已经对IP协议报文结构详细说明,这里不再赘述,IP报文的选项区域会被装入TCP报文,这样就把TCP报文嵌进IP报文,即可利用IP协议进行发送传输数据。
图2-2-5-3 TCP/IP协议报文
喜欢研究java的同学可以交个朋友,下面是本人的微信号:
协议系列之TCP/IP协议的更多相关文章
- Android网络编程系列 一 TCP/IP协议族
在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...
- Android网络编程系列 一 TCP/IP协议族之链路层
这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 数据链路层有三个目的: 为IP模块发送和 接收IP数据报. 为ARP模块发送ARP请求和接收ARP应答. 为RARP发送RA ...
- RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议
RTSP 编辑 RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwo ...
- HTTP协议—— 简单认识TCP/IP协议
大学没读计算机专业,所以很多的专业知识都不知道.既然已经从事了IT这个行业,就势必要去了解下网络底层,虽然实际工作中这些东西用不到.高楼大厦,起于平川.不积跬步,无以至千里,不积小流,无以成江海.我现 ...
- 【转】HTTP协议—— 简单认识TCP/IP协议
转自:www.cnblogs.com/roverliang/p/5176456.html 大学没读计算机专业,所以很多的专业知识都不知道.既然已经从事了IT这个行业,就势必要去了解下网络底层,虽然实际 ...
- HTTP协议—— 简单认识TCP/IP协议(转载)
原文地址(http://www.cnblogs.com/roverliang/p/5176456.html) 1.什么是TCP/IP 如果要了解一个人,可以从他归属的集体聊起来.我们的HTTP协议就 ...
- Android网络编程系列 一 TCP/IP协议族之网际层
这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 网际层包括:IP.ICMP.IGMP 以及处在网际层实际工作在链路层的 ARP 和 RARP等等协议. 1.IP协议 互联网 ...
- Android网络编程系列 一 TCP/IP协议族之传输层
这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 传输层中有TCP协议与UDP协议. 1.UDP介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,U ...
- 网络中常用的各种协议(针对TCP/IP协议组)
网络层: ip协议->网络互连协议 用途:将多个包在网络中联系起来,传输数据包(不可靠传输),最基本功能就是寻址和分段功能,不提供端到端,路由到路由的确认,不提供重发和流量控制.是计算机网络能狗 ...
随机推荐
- java利用poi来读取execl表格返回对象
利用poi来读取execl表格,返回一个对象(可能有点不完善,但是应该能满足平常的所用),用到了反射等等; 使用的jar包有: commons-collections4-4.1.jar poi-3.1 ...
- XMLHTTPRequestObject获取服务器数据
http://www.educity.cn/develop/526316.html 在Web客户端使用xmlhttp对象,可以十分方便的和服务器交换数据,我们可以获取和发送任何类型的数据,甚至二进制数 ...
- 计蒜客NOIP模拟赛D2T2 直线的交点
伦伦刚刚在高中学习了解析几何,学会了计算两条直线的交点.这天,老师给她布置了一道作业.在平面上有 nnn 条直线,他们之间有若干交点.给定一对平板(两条平行的直线),问这有多少对直线,他们的交点在这一 ...
- remove、erase
remove: remove不是真正的删除,删除后数量并没有变化. 它接收一对迭代器,而不是一个容器,所以不知道它作用于哪个容器. 而且没有办法从一个迭代器获取对应于它的容器 实现 remove会用需 ...
- C++Primer学习——类型转换
无符号之间的运算 当一个是无符号类型,另外一个是带符号类型: 如果无符号不小于带符号,那么带符号转换成无符号. 如果无符号小于带符号,当无符号类型的所有值都能存到带符号中时,则无符号转换成带符号,否则 ...
- [BZOJ]1071 组队(SCOI2007)
一道比较NB的套路题. Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为mi ...
- bzoj 1217: [HNOI2003]消防局的设立
Description 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了 ...
- java版的类似飞秋的局域网在线聊天项目
原文链接:http://www.cnblogs.com/wangleiblog/articles/5323305.html 转载请注明 最近在弄一个java版的局域网在线聊天项目,功能跟飞秋差不多.p ...
- Django Class Views
一.Base views View class django.views.generic.base.View 主要的基于类的基本视图.所有其他基于类的视图都从这个基类继承而来.它不是一个通用的视图,因 ...
- redis分布式锁-SETNX实现
Redis有一系列的命令,特点是以NX结尾,NX是Not eXists的缩写,如SETNX命令就应该理解为:SET if Not eXists.这系列的命令非常有用,这里讲使用SETNX来实现分布式锁 ...