博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一文了解运输层TCP/UDP协议
阅读量:5039 次
发布时间:2019-06-12

本文共 2136 字,大约阅读时间需要 7 分钟。

可以访问我的个人博客

你如何收到好友的QQ消息?

  你有没有想过这个问题,当你和朋友使用QQ进行聊天的时候,你的消息是如何发送到好友的手机或者电脑上去的呢?
  在解决这个问题之前不妨先思考一下另一个问题。有一天远方的朋友给你写了一封信,快递员收到信件之后要把信件送到你的手中。首先他要做的是根据信件上的地址信息找到你家所在的那一栋楼 ,找到你家所在的那一栋楼之后,快递员会再根据你家的门牌号才能把信件送到你的手中。
  同理,QQ上的消息要从好友哪里发送到你这里。第一步是要做的是要找到你的手机或者电脑在网络中的地址(IP地址),找到你的设备在网络中的地址之后,你的设备中同时开启了许多其他的网络应用,消息仍然不知道发送到你的手机的哪个位置,为了把信息准确的送到QQ上而不是其他的应用上,必须使用端口号来区别设备上各种不同的网络的应用,至此消息就可以从好友QQ上准确的发送到你的QQ上了。

什么是网络协议?

  首先让我们看一段解释:

> 一个协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及报文发送和/或接收一条报文或其他事件所采取的动作。

  咋看这个解释,可能是一头雾水。我们通过一个类比来解释一下。假如你忘记带手表了,这时你想向一个陌生人询问现在的时间,首先你要的做的是和陌生人打招呼(发送报文)。如果陌生人回应了你(接收一条报文后采取的动作),你才能继续向她问时间。如果陌生人不会说中文,那么你们就不能进行后继的交流了。这是一个简单的人类之间进行交流的协议。

  同理在计算机网络中,两个进行通信的设备也应该遵循相同的网络通信协议才能进行通信。

    

因特网运输层概述

  运输层位于网络层之上应用层之下,该层为运行在不同主机上的<font color = orange>应用进程提供直接的通信服务起着至关重要的作用。如果不同主机之间的应用进程要进行直接通信的话,唯一的方法是使用应用层的协议。
  运输层上使用的协议主要有两种:UDP、TCP。下表展示处了两种协议分别会在什么应用中会被使用到。可以看出TCP协议通常被使用到对数据丢失不能忍受的应用上,如电子邮件、即时通信,因为TCP协议在传输数据的过程中不会造成数据的丢失。而UDP协议在传输的过程中会有些许的数据丢失,所以它通常会被应用到语音电话、视频电话等对数据丢失可以忍受的应用上。

应用 应用层协议 下面的运输协议
电子邮件  SMTP TCP
远程终端访问 Telnet TCP
Web HTTP TCP
文件运输 FTP TCP
远程文件服务器 NFS 通常UDP
流式多媒体 通常专用2 UDP或TCP
因特网电话 通常专用 UDP或TCP

面向连接的运输:TCP

          TCP之所以是被称为面向连接的,是因为两台主机上下应用进程在进行通信之前,必须先"握手"即它们必须相互发送某些预备报文段,以建立连接,这是保证TCP协议用来传输数据可靠的手段之一。
## 三次握手
          前面谈到,TCP协议在进行通信之前会进行三次握手,三次握手之后,两台主机上的应用进程之间才会建立连接,那么三次握手是如何进行的呢?
          第一步:客户端的TCP首先向服务器的TCP发送一个特殊的SYN报文段(该报文段中不包括应用层数据),报文首部的标识位SYN会被置为1,同时报文中会加上客户端随机生成的一个初始序号(client_isn),将此编号放置于该起始的TCP SYN报文段的序号字段中。最后该报文段会被封装在一个IP数据报中,发送给服务器。
          第二步:一旦包含TCP SYN报文段的IP数据报到达服务器主机,服务器会向客户端发送允许连接报文(SYNACK报文段),该报文首部的标识位SYN会被置为0,同时报文中会加上服务器选择的初始序号(server_isn),将此编号放置到TCP报文段首部的序号字段中,同时TCP报文段的确认号字段被置为client_isn + 1。
          第三步:在收到SYNACK报文段后,客户端也要给该连接分配缓存和变量。客户主机则向服务器发送另外一个报文段;这最后一个报文段对服务器的允许连接的报文段就像了确认(该客户通过将值server_isn + 1放置到TCP报文段首部的确认段中来完成此项工作)。因为连接邮件建立了,所以该SYN比特被置为0。
          一旦这三个步骤顺利完成,客户端和服务器之间就可以相互通信了。
无连接运输:UDP
          顾名思义,UDP在应用进程间传输数据之前不需要像TCP那么麻烦的要与服务器进行三次握手,采用UDP时,只要应用进程将数据传输给UDP,UDP就会将此数据打包进报文段并立即将其传递给网络层,发送给远程主机。所以它就无法保证数据是否会被准确的交付到远程主机应用进程。
UDP和TCP比较
          UDP传输数据时不需要建立连接,但会丢失数据。TCP传输数据可靠。两个协议的不同特点导致他们使用的场合不同,在实际的开发中需要视工程的要求来决定使用哪一个协议。

  UDP TCP
是否需要与远程主机建立连接
报文首部开销 8byte 20byte
数据传输可靠性 不可靠 可靠

 

转载于:https://www.cnblogs.com/Helio/p/11103858.html

你可能感兴趣的文章
无乱码截取字符串,中英文混合(转)
查看>>
python-13常用内建模块
查看>>
【Spring】Spring系列7之Spring整合MVC框架
查看>>
POJ2195&&HDU1533(KB11-D 最小费用最大流)
查看>>
symfony2 表单
查看>>
微信小程序调用后台接口+热点新闻滚动展示
查看>>
【实例解析】某水泥企业应用商业智能提升管理效率
查看>>
如何利用自定义函数把阳历转换成阴历
查看>>
declare和typeset DEMO
查看>>
three.js 性能优化的几种方法
查看>>
《梦断代码》读书笔记(三)
查看>>
FreeMarker解析json数据
查看>>
Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
查看>>
次序+“选择不重复的记录”(3)——最大记录
查看>>
Codeforces 450 C. Jzzhu and Chocolate
查看>>
[Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现
查看>>
ACdream 1115 Salmon And Cat (找规律&amp;&amp;打表)
查看>>
MFC中CString.Format的详细用法
查看>>
JSON、JSONP、Ajax的区别
查看>>
AngularJS学习篇(一)
查看>>