Socket小白篇-附加TCP/UDP简介
Socket小白篇-附加TCP/UDP简介
- Socket
- 网络通信的要素
- TCP和UDP
- 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地址(网络上主机设备的唯一标识)
- 端口号(定位程序)
- 用于标示进程的逻辑地址,不同进程的标示
- 有效端口:0~65535,其中0~1024由系统使用或者保留端口,开发中建议使用1024以上的端口
- 传输协议(用什么样的方式进行交互)
- 通讯的规则
- 常见协议:TCP、UDP
3.TCP和UDP
- TCP(传输控制协议)
- 建立连接,形成传输数据的通道
- 在连接中进行大数据传输(数据不受限制)
- 通过三次握手完成连接,是可靠协议,安全送达
- 必须建立连接,效率会稍低
建立连接的传输协议就是TCP协议,发送HTTP网络请求的时候需要通过一个通信管道建立连接,HTTP就是一个TCP连接。
通道建立连接前为什么要进行三次握手呢?三次握手是为了保证数据的安全性和可靠性。举一个打电话的例子来说,用手机拨号这个过程就是第一次握手,对方接到电话”喂”,这就是第二次握手,我们也会回应”喂”,这就是第三次握手,这三个过程没有问题的话,就说明连接建立是没问题的。如果任一方在拨号后没有回应,那就不能保证这个链接是有效的,就能保证数据的一个安全性和可靠性。
TCP每次传输数据的时候都要建立连接,所以导致其效率是较低的。我们在网络中会多次请求数据,也就意味着每次都要三次握手。就比如,你给对方打电话,保证通话连接后开始说一句话,之后就把电话挂掉了;说第二句话的时候又要再打一次电话,重复之前的操作。效率会低点但是对于我们的网络请求HTTP请求影响不大,因为我们的下次请求时间是不固定的。由于这个请求时间不固定,如果这条数据交互还一直保持着,那我们打电话来说,我们不交流了,但还是保持着通话,那我们的花费就多了。
- UDP(用户数据报协议)
- 将数据及源和目的封装成数据包中,不需要建立连接
- 每个数据报的大小限制在64K之内
- 因为无需连接,因此是不可靠协议
- 不需要建立连接,速度快
第一点不需要建立连接怎么理解呢?例如我们看直播的时候,主播在他电脑上的操作会及时传递到我们的屏幕上,如果我们是通过TCP的形式传递的话,党有很多用户的话,那是比较卡的,会引起堵塞的。广播的话是不会用TCP的,需要采用UDP,只需要把数据和目的地封装成包进行发送。中间的过程是怎么样的,可能网络不好卡在那里了,等网络恢复的时候,我们看到的就是最新的,而不会是之前的画面了。这就是采用UDP的情况,所以UDP是不安全不可靠的,这就是UDP不需要建立连接,不能保证数据能安全的送给我们。
第二点为什么数据报这么小?因为不能保证数据安全,如果过大的话,传输中间出问题的可能性就比较大,一旦有问题,数据就都没有了。还是拿直播举例,如果一次性发20分钟的数据,出问题的话那就是20分钟的直播画面都没有,所以数据报小是为了保证数据如果丢失,数据丢失不会那么多。
UDP无需建立连接,不用三次握手,那就速度比较快的。
总结:TCP、UDP是数据传输的方式。举例说明就是发快递的话,可以选择多个快递公司去发这个快递。
Socket小白篇-附加TCP/UDP简介的更多相关文章
- TCP/UDP简介
TCP/UDP简介 Socket小白篇-附加TCP/UDP简介 Socket 网络通信的要素 TCP和UDP Socket的通信流程图 1.Socket 什么是Socket Socket:又称作是套接 ...
- Android 进阶12:进程通信之 Socket (顺便回顾 TCP UDP)
不要害怕困难,这是你进步的机会! 读完本文你将了解: OSI 七层网络模型 TCPIP 四层模型 TCP 协议 TCP 的三次握手 TCP 的四次挥手 UDP 协议 Socket 简介 Socket ...
- 网络编程基础socket 重要中:TCP/UDP/七层协议
计算机网络的发展及基础网络概念 问题:网络到底是什么?计算机之间是如何通信的? 早期 : 联机 以太网 : 局域网与交换机 广播 主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无 ...
- socket通讯实例与TCP/UDP的区别
一.socket代码实例 1.简单的socket通讯: 服务端代码实例: import socket sock = socket.socket(socket.AF_INET, socket.SOCK_ ...
- TCP UDP socket http webSocket 之间的关系
---恢复内容开始--- OSI&TCP/IP模型 要弄清tcp udp socket http websocket之间的关系,首先要知道经典的OSI七层模型,与之对应的是TCP/IP的四层模 ...
- TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的使用 框架源码结构 补充说明 源码地址 说明 之前有好几篇博客在讲TCP/UDP通信方 ...
- TCP/UDP简易通信
TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的 ...
- 【转】TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
[转]TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP ...
- c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP 入门级客户端与服务端交互代码 网 ...
随机推荐
- 热烈庆祝UE4完全免费Free---GitHub上源码的关联方法
声明:所有权利保留. 转载请说明出处:http://blog.csdn.net/cartzhang/article/details/44040317 IF YOU LOVE SOMETHING, SE ...
- 《写给大忙人看的Java SE 8》——Java8新特性总结
阅读目录 接口中的默认方法和静态方法 函数式接口和Lambda表达式 Stream API 新的日期和时间 API 杂项改进 参考资料 回到顶部 接口中的默认方法和静态方法 先考虑一个问题,如何向Ja ...
- BootstrapTable的使用教程
官方网站:http://bootstrap-table.wenzhixin.net.cn/参考文档:http://issues.wenzhixin.net.cn/bootstrap-table/ind ...
- Tomcat下ajax请求路径总结
ajax的url有两种,一种是绝对路径,另一种是相对路径. 一.绝对路径:包括协议名称.主机地址.端口.web项目名称等的完整请求路径. 例如: $.ajax({ url:"ht ...
- js声明json数据,打印json数据,遍历json数据,转换json数据为数组
1.js声明json数据: 2.打印json数据: 3.遍历json数据: 4.转换json数据为数组; //声明JSON var json = {}; json.a = 1; //第一种赋值方式(仿 ...
- oracle的sql查询结果拼接
oracle数据库中,使用wm_concat(column)函数,可以进行字段合并 oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oracle wm_co ...
- handsontable前端excel学习笔记
暂时没有好的中文资料,大概找了三遍随便看看,之后重点研究其github 1.Handsontable 学习笔记-Methods 2. Handsontable通用方法 3.handsontable的核 ...
- 链接hdf5库出现错误的解决办法
作者:朱金灿 来源:http://blog.csdn.net/clever101 在链接hdf5库出现一些链接错误: error LNK2001: 无法解析的外部符号 _H5T_NATIVE_DOUB ...
- 【Leetcode】Linked List Cycle II
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...
- android Notification分析——
您可能会遇到各种问题
使用的各种总结上线通知,csdn还有一个非常到位的总结,不这样做,反复总结,学生需要能够搜索自己或参考下面给出的链接. 研究开始时仔细阅读一些,今天,功能开发,一些问题和经验自己最近的遭遇给大家分享. ...