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. JS将秒换成时分秒

    function formatSeconds(value) {    var theTime = parseInt(value);// 秒    var theTime1 = 0;// 分    va ...

  2. 黑马程序猿 ---------- Java网络技术之 ---正則表達式 (Day06)

    ---------------------- ASP.Net+Unity开发..Net培训.期待与您交流. ---------------------- 正則表達式 正則表達式:基本知识 1  字符, ...

  3. VM中装Linux换ISO文件报错"该光盘无法被挂载"

    一.发现问题 利用VM安装Red Hat Linux的时候,第一个iso安装完毕,准备换第二个iso,报错“该光盘无法被挂载”. 二.解决办法 上面的菜单栏中“虚拟机”—>“设置”—>“硬 ...

  4. LPCTSTR

    LPCTSTR类型: L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容 ...

  5. SpringMVC记住密码功能

    CookieTool (Cookie帮助类): package com.utcsoft.common.cookie; import java.util.HashMap; import java.uti ...

  6. uvc摄像头代码解析5

    8.初始化uvc控制 8.1 重要结构体 struct uvc_control { //uvc控制 struct uvc_entity *entity; //uvc实体 struct uvc_cont ...

  7. WPF的MVVM

    一.关于WPF WPF(Windows  Presentation Foundation) ,从名字来看,Microsoft想把WPF技术作为Windows程序外观(表现层)的基础.我们知道,现在开发 ...

  8. windows消息处理(强烈推荐,收藏)

    由于看了一下,比较好理解,暂时先放到这里,待有空再翻译.只是在每节后大致介绍一下讲的内容. 感觉写的比较全,无论从消息的原理还是从MFC操作上来说,值得一看,我也在此做个收藏. (一) 说明:以下首先 ...

  9. AES加密例子(python和php版本)

    AES加密例子(python和php版本) AES加密例子(python和php版本)

  10. 关于SIGSLOT的一个简单的程序

    废话少说直接看代码即可,这只是一个简单的程序,可以帮我们简单地明白SIGSLOT是怎么回事.至于深入研究自己去百度吧. #include "sigslot.h" using nam ...