TCP和UDP相关概念
位于传输层的协议,都是基于IP协议的。
TCP是面向连接的、可靠的传输,UDP是无连接的、不可靠的传输。要进行TCp传输时候,需要进行三次握手,建立连接,然后才能发送数据,而且在发送过程中,有数据的确认和重传机制,因此TCP适用于传输大量数据,而且要求传输质量的长和;UDP没有上述繁琐的步骤,它直接向指定的主机的端口发送数据,不用建立连接,而且在发送的过程中也不管对方是否收到数据,因此UDP适用于一次传输少量数据,不要钱传输质量的场合。因此UDP比TCP更快。
TCP三次握手:
a) Client发送SYN数据包,SYN=1,seq=X请求Server的响应;
b) Server发送SYN+ACK数据包ACK=X+1,SYN=1,seq=Y,确认client的请求,同时发送自己的SYN包;
c) Client收到SYN+ACK数据包,知道自己的请求已经被允许,则发送一个ACK数据包对Server发送的SYN数据包进行确认ACK=Y+1, seq=Z;
SYN攻击:在TCP三次握手中,Server发送了SYN+ACK包之后,client并没有发送ack包之前的这段时间,这个握手被称为半连接。此时Server会进入SYN_RECV,当收到client的ack包之后,才会进入established状态,握手才完成。SYN攻击就是利用这一点,使用大量不存在的IP地址发送SYN包给Server,此时Server的连接队列会存在大量的半连接,等待客户端发送ack包,由于client的ip地址是伪造的,所以Server会一直重发,要求客户确认,这就会占用Server的大量系统资源,使得Server服务变慢甚至宕机,造成新的正常连接无法进行。这是一种典型的DDOS攻击。
TCP四次断开,TCP连接断开可以任一方发起的,总共需要四次握手,具体过程如下:
a) 主动方发送fin+ack+syn数据包(fin=1,seq=X,ack=Y),要求结束连接;
b) 被动方收到fin数据包,对其进行确认(ack= X +1,seq= Y+1),说明收到了主动方的fin数据包。此时主动方就不能在给被动方发数据了,关闭了了一半的链接;
c) (可省略)被动方还有数据要发送给主动方,则会继续发送(ACK=X+1)数据包,直到数据发送完毕;
d) 被动方数据发送完毕,发送fin数据包(fin=1,ack=Y+1,seq=Z),表示自己的数据也发送完毕,请求关闭链接;
e) 主动方收到对方的fin包,则知道对方数据也已经发完,则发送ack包确认关闭(ack=z+1,seq=x+1)数据包。
需要注意的时候当主动方发完第四个握手的包之后,并不会马上关闭连接,它会进入一个2MSL等待状态,其实就是一来一回数据包传输时间,确认这个数据包被动方收到,也关闭连接。设置这个状态主要就是为了确保第四个数据包能够到达被动方,并且被动方收到这个包,如果在一定时间内被动方还没有收到第四个包的话,就会重发fin包,则此时如果主动方已经关闭连接,就收不到这个包了。这也就是2MSL等待状态产生的原因。
http://www.cnblogs.com/hnrainll/archive/2011/10/14/2212415.html
TCP和UDP相关概念的更多相关文章
- C++网络套接字编程TCP和UDP实例
原文地址:C++网络套接字编程TCP和UDP实例作者:xiaojiangjiang 1. 创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1) 创建套接字(so ...
- 【校验】TCP和UDP的校验和
一开始,私以为校验和只是简单的求和得到的结果,后来在TCP和UDP里面看到使用的校验和方式有点奇怪--二进制反码(循环进位)求和. 人类的认知过程必将从简单到复杂,看下这个二进制反码循环求和是啥子意思 ...
- 初入网络系列笔记(2)TCP和UDP
一.借鉴说明,本博文借鉴以下博文 1.BlueTzar,TCP/IP四层模型, http://www.cnblogs.com/BlueTzar/articles/811160.html 2.叶剑峰,漫 ...
- 传输层协议TCP和UDP
本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...
- 【Python网络编程】利用Python进行TCP、UDP套接字编程
之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...
- http、tcp、udp、OAUTH2.0网络协议区别
一.先来一个讲TCP.UDP和HTTP关系的 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RAR ...
- TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释
一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...
- OSI参考模型及各层功能,TCP与UDP的区别
OSI参考模型:ISO/IEC 7498标准定义了网络互联的7层结构模型,即开放系统互连参考模型. OSI参考模型定义了开放系统的层次结构.层次之间的相互关系,以及各层所包括的可能的服务.OSI的服务 ...
- TCP与UDP的区别
TCP与UDP的区别 TCP面向连接:UDP是无连接,即发送数据之前不需要建立连接 TCP提供可靠的服务,TCP连接传送的数据,无差错.不丢失.不重复,且按顺序到达:UDP尽最大努力交付,即不保证可靠 ...
随机推荐
- Java中按值传递与按引用传递的区别
值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响 ...
- TP中if标签
if标签 If标签如果php中if语句的作用,if是用于流程控制的. 在ThinkPHP中if标签也是用于流程控制的. If标签的语法格式: <if condition=’条件表达式’> ...
- arp_filter的验证,使用net namespace
使用网络命名空间:net namespace 在namespace ns1中增加了两个网卡 sudo ip netns add ns1 sudo ip link add veth0 type veth ...
- eclipse官方网址、各个版本的下载
Eclipse3.1后各版本代号 (2013-07-10 20:48:42) 转载▼ 分类: Java Eclipse 3.1 版本代号 IO [木卫1,伊奥] Eclipse 3.2 版本代号 ...
- [讲解]sql except和intersect运算符(比拟两个或多个select语句的结果并前去非重复值)
图 1 UNION 中若有重复的行,会被移除,只留下一个 1.简介 EXCEPT和INTERSECT运算符使您可以比较两个或多个SELECT语句的结果并返回非重复值. 2.区别 EXCEPT运算符返回 ...
- 【bzoj2829】信用卡凸包 凸包
题目描述 输入 输出 样例输入 26.0 2.0 0.00.0 0.0 0.02.0 -2.0 1.5707963268 样例输出 21.66 题解 凸包 傻逼题,答案显然为:所有圆心构成的凸包周长+ ...
- 【bzoj4244】邮戳拉力赛 背包dp
题目描述 IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车两种,上行电车沿编号增大方向行驶,下行电车沿编 ...
- Python网络编程socket
网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...
- 《Unix网络编程卷1:套接字联网API》读书笔记
第一部分:简介和TCP/IP 第1章:简介 第2章:传输层:TCP.UDP和SCTP TCP:传输控制协议,复杂.可靠.面向连接协议 UDP:用户数据报协议,简单.不可靠.无连接协议 SCTP:流控制 ...
- 创建Django的App
一. 新建1个App,命令:python manage.py startapp lib 1. 打开终端 2. 新建 3. 把业务代码放到每一个APP里面就更专业了. 修改urls里面的代码如下: 运行 ...