TCP/UDP简介

Socket小白篇-附加TCP/UDP简介

  1. Socket
  2. 网络通信的要素
  3. TCP和UDP
  4. Socket的通信流程图

1.Socket

什么是Socket

Socket:又称作是套接字,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为Socket。

Socket是对TCP/IP的协议的封装,Socket本身并不是协议,而是一个调用的接口,只有通过Socket我们才能使用TCP/IP。

  Socket是和网络紧密相关的,网络上的两个程序一般就是指web服务器和我们的客户端,数据交换的过程就是我们客户端发一个请求到HTTP服务器、服务器返回数据,这个过程就是数据交换的过程。客户端和服务器之间的数据交换是需要一个双向的通信连接,两者之间是需要一个通道去实现连接的。

通信管道就是通信连接,有了这个管道,我们就可以进行数据传输。客户端到服务器端必须要有一个通道才能实现数据的交互。如果有座大山挡着了道路我们就会在山中开辟一个隧道,这样我们才能走到山的另一端。Socket就可以理解为这个隧道的两个端口,一个入口一个出口。

一个网络请求并不是我们所认为的请求-相应的过程,它的底层是开辟了一个通信管道的。所以应用程序通常是通过Socket(套接字)向网络发出请求或者应答网络请求。

流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。

2. 网络通信的要素

发一个HTTP请求到网络上,我们会有一个URL,URL会有一个TCP协议、IP地址和端口号HTTP默认的端口号是80,没有IP地址我们就没办法找到服务器,没有端口号我们就找不到应用程序。

网络上的请求其实就是通过Socket建立一个通信管道实现数据交互的。IP地址就是网络上主机设备的唯一标识。 端口号就是进程的标识,一个应用程序就是一个进程。

服务器其实也是一个电脑,那么服务器上也会有很多应用程序。假如我要访问百度的服务器,百度服务器上会有一个Web应用程序来供我们访问,例如服务器的数据库应用程序(MySQL),服务器的数据库存储着大量的数据。客户端访问服务器,我们可以通过IP地址访问,我们要访问其Web应用程序而不是数据库服务,就要通过对应的端口作为一个标识来定位到Web应用程序。

总结如下:

  • 网络上的请求就是通过Socket来建立连接然后互相通信
  • IP地址(网络上主机设备的唯一标识)
  • 端口号(定位程序)
  1. 用于标示进程的逻辑地址,不同进程的标示
  2. 有效端口:0~65535,其中0~1024由系统使用或者保留端口,开发中建议使用1024以上的端口
  • 传输协议(用什么样的方式进行交互)
  1. 通讯的规则
  2. 常见协议:TCP、UDP

3.TCP和UDP

  • TCP(传输控制协议)
  1. 建立连接,形成传输数据的通道
  2. 在连接中进行大数据传输(数据不受限制)
  3. 通过三次握手完成连接,是可靠协议,安全送达
  4. 必须建立连接,效率会稍低

  建立连接的传输协议就是TCP协议,发送HTTP网络请求的时候需要通过一个通信管道建立连接,HTTP就是一个TCP连接。

  通道建立连接前为什么要进行三次握手呢?三次握手是为了保证数据的安全性和可靠性。举一个打电话的例子来说,用手机拨号这个过程就是第一次握手,对方接到电话”喂”,这就是第二次握手,我们也会回应”喂”,这就是第三次握手,这三个过程没有问题的话,就说明连接建立是没问题的。如果任一方在拨号后没有回应,那就不能保证这个链接是有效的,就能保证数据的一个安全性和可靠性。

  TCP每次传输数据的时候都要建立连接,所以导致其效率是较低的。我们在网络中会多次请求数据,也就意味着每次都要三次握手。就比如,你给对方打电话,保证通话连接后开始说一句话,之后就把电话挂掉了;说第二句话的时候又要再打一次电话,重复之前的操作。效率会低点但是对于我们的网络请求HTTP请求影响不大,因为我们的下次请求时间是不固定的。由于这个请求时间不固定,如果这条数据交互还一直保持着,那我们打电话来说,我们不交流了,但还是保持着通话,那我们的花费就多了。

  • UDP(用户数据报协议)
  1. 将数据及源和目的封装成数据包中,不需要建立连接
  2. 每个数据报的大小限制在64K之内
  3. 因为无需连接,因此是不可靠协议
  4. 不需要建立连接,速度快

第一点不需要建立连接怎么理解呢?例如我们看直播的时候,主播在他电脑上的操作会及时传递到我们的屏幕上,如果我们是通过TCP的形式传递的话,党有很多用户的话,那是比较卡的,会引起堵塞的。广播的话是不会用TCP的,需要采用UDP,只需要把数据和目的地封装成包进行发送。中间的过程是怎么样的,可能网络不好卡在那里了,等网络恢复的时候,我们看到的就是最新的,而不会是之前的画面了。这就是采用UDP的情况,所以UDP是不安全不可靠的,这就是UDP不需要建立连接,不能保证数据能安全的送给我们。

第二点为什么数据报这么小?因为不能保证数据安全,如果过大的话,传输中间出问题的可能性就比较大,一旦有问题,数据就都没有了。还是拿直播举例,如果一次性发20分钟的数据,出问题的话那就是20分钟的直播画面都没有,所以数据报小是为了保证数据如果丢失,数据丢失不会那么多。

UDP无需建立连接,不用三次握手,那就速度比较快的。

总结:TCP、UDP是数据传输的方式。举例说明就是发快递的话,可以选择多个快递公司去发这个快递。

 

TCP/UDP简介的更多相关文章

  1. Socket小白篇-附加TCP/UDP简介

    Socket小白篇-附加TCP/UDP简介 Socket 网络通信的要素 TCP和UDP Socket的通信流程图 1.Socket 什么是Socket Socket:又称作是套接字,网络上的两个程序 ...

  2. Linux下UDP简介及程序设计

    一.UDP简介 UDP(User Datagram Protocol),用户数据报协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务.UDP提供了无连接通信,且不对传 ...

  3. 一款功能强大的TCP/UDP工具---flynet

    前言 前段时间做某个项目,由于涉及到tcp/udp方面的知识比较多,于是就索性趁热打铁,写个工具来强化相关知识.另外由于并非十分擅长Golang,所以也顺便再了解下Golang吧. 简介 flynet ...

  4. 分布式系统(二) --SOA 以及一些网络通信协议TCP/UDP SYN攻击

    SOA(面向服务的架构):Service Oriented Architecture面向服务的架构.也就是把工程拆分成服务层.表现层两个工程.服务层中包含业务逻辑,只需要对外提供服务即可.表现层只需要 ...

  5. 一文解析TCP/UDP

    声明:本文部分内容来自互联网.书籍等渠道,表示感谢: 转载请注明出处:@热风.https://www.cnblogs.com/refeng/p/13996657.html 目录 TCP/UDP详解 1 ...

  6. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

  7. TODO:Golang语言TCP/UDP协议重用地址端口

    TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一 ...

  8. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.2

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

  9. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.0.1

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

随机推荐

  1. 使用 jackson序列格式化日期

    [1]自定义时间,序列化类 [java] view plaincopy package com.fsti.bm.utils; import java.io.IOException; import ja ...

  2. Embedded Linux Primer----嵌入式Linux基础教程--章节介绍

    章节介绍 第一章,“导引”,简要介绍了Linux被迅速应用在嵌入式环境的驱动因素,介绍了与嵌入式Linux相关的几个重要的标准和组织. 第二章,“第一个嵌入式经历”,介绍了与后几章所构建的嵌入式Lin ...

  3. 跟着鬼哥学so改动,一,准备篇

    图/文 听鬼哥说故事 闲话少说,so的改动,重要性大家都知道,这里从头编写so文件,分析so文件,改动so文件,打算做一个系列的教程,当然,主要是看时间同意. android的sdk配置以及ndk环境 ...

  4. poj1459 Power Network --- 最大流 EK/dinic

    求从电站->调度站->消费者的最大流,给出一些边上的容量.和电站和消费者能够输入和输出的最大量. 加入一个超级源点和汇点,建边跑模板就能够了. 两个模板逗能够. #include < ...

  5. AJAX实现类似百度的搜索提示,自动补全和键盘、鼠标操作

    <script type="text/javascript"> $(document).ready(function(){ var highlightIndex = - ...

  6. JQuery 插件之Ajax Autocomplete(ajax自动完成)

    平时用百度,谷歌搜索的时候 会有一个下 拉列表进行提示 这是一个非常好的功能 本文要介绍的这个JQuery 插件 名叫Ajax Autocomplete 顾名思义 ajax 也就是用ajax的方式获取 ...

  7. ASP.NET - GridView实现点击编辑列

    加载: 点击编辑: 数据库设计: 前端代码: DataKeyNames="ID"  设置点击“编辑”选项的时候,要获取的值,一般获取ID主键,便于修改数据. AutoGenerat ...

  8. 一种H.264高清视频的无参考视频质量评价算法(基于QP和跳过宏块数)

    本文记录一种无参考视频质量评价算法.这是我们自己实验室前两年一个师姐做的,算法还是比较准确的,在此记录一下. 注意本算法前提是高清视频.而且是H.264编码方式. 该方法主要使用两个码流里面的参数进行 ...

  9. golang做的邮件服务器

    https://gowalker.org/github.com/gleez/smtpd https://www.v2ex.com/t/133221

  10. 开源中国IOSclient

    我想看看别人开发项目.通过吸收经验,然后找到开放的中国,丹尼尔一些网上也开发了自己的开源在中国client 在网上看到很多网友说,不能下载东西像安装,我带来了我的方式,其中的一些朋友想帮忙. http ...