位于传输层的协议,都是基于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相关概念的更多相关文章

  1. C++网络套接字编程TCP和UDP实例

    原文地址:C++网络套接字编程TCP和UDP实例作者:xiaojiangjiang 1.       创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1)  创建套接字(so ...

  2. 【校验】TCP和UDP的校验和

    一开始,私以为校验和只是简单的求和得到的结果,后来在TCP和UDP里面看到使用的校验和方式有点奇怪--二进制反码(循环进位)求和. 人类的认知过程必将从简单到复杂,看下这个二进制反码循环求和是啥子意思 ...

  3. 初入网络系列笔记(2)TCP和UDP

    一.借鉴说明,本博文借鉴以下博文 1.BlueTzar,TCP/IP四层模型, http://www.cnblogs.com/BlueTzar/articles/811160.html 2.叶剑峰,漫 ...

  4. 传输层协议TCP和UDP

    本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...

  5. 【Python网络编程】利用Python进行TCP、UDP套接字编程

    之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...

  6. http、tcp、udp、OAUTH2.0网络协议区别

                    一.先来一个讲TCP.UDP和HTTP关系的 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RAR ...

  7. TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释

    一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...

  8. OSI参考模型及各层功能,TCP与UDP的区别

    OSI参考模型:ISO/IEC 7498标准定义了网络互联的7层结构模型,即开放系统互连参考模型. OSI参考模型定义了开放系统的层次结构.层次之间的相互关系,以及各层所包括的可能的服务.OSI的服务 ...

  9. TCP与UDP的区别

    TCP与UDP的区别 TCP面向连接:UDP是无连接,即发送数据之前不需要建立连接 TCP提供可靠的服务,TCP连接传送的数据,无差错.不丢失.不重复,且按顺序到达:UDP尽最大努力交付,即不保证可靠 ...

随机推荐

  1. 已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数

    #include<iostream> using namespace std; //#define maxn 2000010 #include<stdio.h> //int a ...

  2. vs调试iisExpress经常卡死

    最近调试一个项目时,电脑经常卡死,不得不强制重启,一直不知道iisExpress为何卡死的. 想了很多办法,强制删除bin里面的文件,结果不行: 企图删除iisExpress虚拟目录中的文件也不行: ...

  3. DS06--图

    一.学习总结 1.图的思维导图 2.图学习体会 深度优先遍历与广度优先遍历 不同点:广度优先搜索,适用于所有情况下的搜索,但是深度优先搜索不一定能适用于所有情况下的搜索.因为由于一个有解的问题树可能含 ...

  4. J2EE面试常见试题

    一.基础问答 1.下面哪些类可以被继承? java.lang.Thread (T) java.lang.Number (T) java.lang.Double (F) java.lang.Math  ...

  5. C语言文法翻译

    <程序>→<外部声明>|<程序><外部声明> <外部声明>→<函数定义>|<声明> <函数定义>→< ...

  6. n元一维向量向左循环移位i的几种算法

    1.最简单的算法借助于一个n元的中间向量在n步时间内完成 时间复杂度:O(n)  空间复杂度O(n) void shift_easy(int arr[], int _arr[], int n, int ...

  7. python mysql查询结果乱码

    在connect()方法中传入charset='utf8'参数即可. conn = MySQLdb.connect(host=get_config_values('mysql', 'host'), p ...

  8. 【EF】EF Code First Migrations数据库迁移

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  9. Strus默认跳转方式是请求转发 地址栏不变 与javaweb的内部转发一样

    Strus默认跳转方式是请求转发 地址栏不变 与javaweb的内部转发一样

  10. 获取网站图标Icon

    通常情况下,做网站的都会给自己的网站添加一个Icon,浏览器上一长排的标签页,用Icon来区分就显得更加醒目.现在想找一个没有Icon的网站并不好找,可见没有Icon的网站是多么的业余啊." ...