浅谈tcp 与udp
tcp是一种面向连接的、可靠的、基于字节流的传输层通信协议。是专门为了在不可靠的互联网络上提供一个可靠的端到端字节流而设计的,面向字节流。
udp(用户数据报协议)是iso参考模型中一种无连接的传输层协议,提供面向操作的简单不可靠的非连接传输层服务,面向报文。
它们之间的区别:
1、tcp是基于连接的,可靠性高;udp是基于无连接的,可靠性较低;
2、由于tcp是连接的通信,需要有三次握手、重新确认等连接过程,会有延时,实时性差;同时过程复杂,也使其易于被攻击;而udp无连接,无建立连接的过程,因而实时性较强,也稍安全;
3、在传输相同大小的数据时,tcp首部开销20字节;udp首部开销只有8个字节,tcp报头比udp复杂,故实际包含的用户数据较少。tcp无丢包,而udp有丢包,故tcp开销大,udp开销较小;
4、每条tcp连接只能是点到点的;udp支持一对一、一对多、多对一、多对多的交互通信。
所以对于应用这方面:
如果对实时性要求高和高速传输的场合下需要使用udp;如果需要传输大量数据且对可靠性要求高的情况下应该使用tcp;在可靠性要求较低,追求效率的情况下应该使用udp。
对于tcp来说,既然需要面向连接,就会涉及到三个阶段:连接建立、数据传送、连接释放三个过程;而“三次握手”就发生在连接建立这个阶段,下面对三次握手和四次挥手解释一下:
三次握手:
第一次握手:客户端发送一个tcp的syn标志位置为1的包(连接请求),指明客户打算连接服务器的端口;
第二次握手:当服务器收到连接请求之后,返回确认包(ack)应答,即将syn和ack标志位同时致为1(授予连接),并为这次连接分配资源;
第三次握手:客户端收到服务器的授予连接请求之后,再次发送确认包(ack)(syn标志位为0,ack标志位为1),并分配资源,这样tcp就建立连接了。
四次挥手:
中断连接端可以是客户端也可以是服务端
假设是客户端发起的中断连接请求,则客户端发送fin报文,服务端接收到客户端发送的fin报文后,意思是说:“客户端已经没有数据要发送给你了”,但是这时候如果服务端有数据没有发送完成,则不必着急关闭socket,可以继续发送数据,所以服务端先发送ack,告诉客户端,收到了客户端刚才的关闭连接请求,但是服务端还没有准备好,还有数据没有发送完,所以请客户端继续等我的消息,这个时候客户端就进入了fin_wait状态,继续等待服务端的fin报文;当服务端确定已经发送完数据后,则想客户端发送fin报文,告诉客户端已经发送完数据,可以关闭连接了;当客户端接收到服务端的fin报文后,就知道可以关闭连接了,但是还是不相信网络,怕服务端不知道要关闭,所以客户端发送ack给服务端后进入了time_wait状态,如果服务端没有收到ack则可以重传;服务端收到ack后,就知道可以关闭连接了;当服务端等待了2msl后依然没有收到回复,则证明服务端已经正常关闭了,那客户端也会关闭连接了,就这样,tcp连接就完成了关闭。
浅谈tcp 与udp的更多相关文章
- 浅谈TCP IP协议栈(三)路由器简介
读完这个系列的第一篇浅谈TCP/IP协议栈(一)入门知识和第二篇浅谈TCP/IP协议栈(二)IP地址,在第一篇中,可能我对协议栈中这个栈的解释有问题,栈在数据结构中是一种先进后出的常见结构,而在整个T ...
- Qt网络编程-书接上文,浅谈TCP文件收发,以及心跳包
qt网络编程-书接上文,浅谈文件收发 上文Qt网络编程-从0到多线程编程中谈到 在qt中的qtcpsocket通讯的用法,接下来浅谈一下关于tcp通讯的实际应用,当然了由于是浅谈,也不能保证其功能的完 ...
- 浅谈 TCP、IP、DNS 和 HTTP 的关系
一.浅谈三个协议的基本概念 1.IP 协议 按层次分,IP网际协议位于网络层,几乎所有的网络的系统都会用到 IP 协议,其重要性非同一般.IP 协议作用就是把各种数据包传送给对方,对方的地址就要看其 ...
- 浅谈TCP IP协议栈(四)IP协议解析
通过之前的网络层基础知识,IP地址以及路由器的简介,大家应该对于TCP/IP有一个大致的了解,在脑海里应该对于网络的几个基础概念有个大概的了解,简单点说整个协议栈就是在做一件事,规定网络报文(网络传输 ...
- 面试:浅谈tcp/udp
tcp是一种面向连接的.可靠的.基于字节流的传输层通信协议.是专门为了在不可靠的互联网络上提供一个可靠的端到端字节流而设计的,面向字节流. udp(用户数据报协议)是iso参考模型中一种无连接的传输层 ...
- 浅谈TCP/IP网络编程中socket的行为
我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: 1. TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) 2. Socket I/O系统 ...
- 测试那些事儿—浅谈TCP/IP协议
TCP/IP协议是一系列网络协议的总和,是构成网络通信的核心骨架. TCP/IP的工作原理通俗的讲就是一个主机的数据要经过哪些过程才能发送到对方的主机上. TCP/IP协议采用四层结构,分别为应用层, ...
- 浅谈TCP扫描与SYN扫描与FIN扫描
下面就这三种方法来小小的探讨一下,不对的地方还请多多指教! 1:TCP扫描 相对来说是速度比较慢的一种,为什么会慢呢?因为这种方法在扫描的时候会从本地主机的一个端口向目标主机的一个端口发出一个连接请求 ...
- 浅谈TCP优化
原文地址:http://kb.cnblogs.com/page/197406/ 很多人常常对TCP优化有一种雾里看花的感觉,实际上只要理解了TCP的运行方式就能掀开它的神秘面纱.Ilya Grigor ...
- 浅谈TCP优化(转)
很多人常常对TCP优化有一种雾里看花的感觉,实际上只要理解了TCP的运行方式就能掀开它的神秘面纱.Ilya Grigorik 在「High Performance Browser Networking ...
随机推荐
- 使用Java API操作Neo4j
使用IntelliJ IDEA (Jet Brains) 创建java工程 把下载好的neo4j包中的lib文件下的所有jar文件复制到工程Neo4j_Project的lib文件夹下(若无lib文件夹 ...
- 预处理指令详解(C语言
一.预处理符号 预处理符号是C语言内置的符号,是可以直接使用的. 其中,若遵顼ANSI C,则__STDC__ 为1,否则未定义. 二.#define 1)定义标识符 define可以用来定义标识符, ...
- mysql8使用tmpfs内存磁盘当内存数据库的配置方法
序: 内存关系数据库没有找到开源好用的,很多都是商用.虽然mysql有memory引擎,但写是整体锁表,没法用. 一直想将mysql放入内存中,搜索n次资料,没找到合适的,可能之前思路不对. 最近在测 ...
- UE打LOG整理
Kismet库 蓝图方法cpp使用 例:打LOG:Print String 蓝图节点的鼠标tips:Target is Kismet System Library #include "Run ...
- SQLServer中使用between查询日期
SQL Server中字段是Datetime型 以" YYYY-MM-DD 00:00:00" 存放的 between and是包括边界值的,not between不包括边界值,不 ...
- vscode自定义工作目录
vscode作为目前最受欢迎的编辑器,一直用vscode,但是最近清理c盘,发现vscode的目录,插件和数据目录,占据了上G的空间,那么,如何自定义 vscode的工作目录和数据目录呢,这里参考了一 ...
- C# 实时显示时间
c#实时显示时间 - vv彭 - 博客园 (cnblogs.com)
- JavaScript案例:倒计时
展示效果: 代码示例: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- 002. html篇之《表格》
html篇之<表格> 1. 结构 <table> <!-- 表格标签 --> <caption>标题,自动居中对齐</caption> &l ...
- js获取字符串中含有某个字符个数
得到字符串含有某个字符的个数 /** * 获取字符串中某字符的个数 * @param str 字符串 * @param char char为某字符 * @returns String */ const ...