位于传输层的协议,都是基于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. HDU 1874 畅通工程续-- Dijkstra算法详解 单源点最短路问题

    参考 此题Dijkstra算法,一次AC.这个算法时间复杂度O(n2)附上该算法的演示图(来自维基百科): 附上:  迪科斯彻算法分解(优酷) problem link -> HDU 1874 ...

  2. HDU 1257 最少拦截系统(最长递减子序列的条数)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1257 题解: #include<iostream> #include<cstdio ...

  3. 1 RabbitMQ 安装,配置

    1:安装 yum install -y rabbitmq-server   2:主要程序介绍 # 管理插件的程序 /usr/sbin/rabbitmq-plugins # 服务程序 /usr/sbin ...

  4. 【leetcode】215. Kth Largest Element in an Array

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  5. (六)hadoop系列之__hadoop分布式集群环境搭建

    配置hadoop(master,slave1,slave2) 说明: NameNode: master DataNode: slave1,slave2 ------------------------ ...

  6. Robotium之“去哪儿旅行”

    Robotium基于APK自动化测试,只有APK文件,没有源代码. Eclipse 默认的debug keystore可以在Windows->Preferences->Android-&g ...

  7. Spring boot整合shiro框架(2)

    form提交 <form th:action="@{/login}" method="POST"> <div class="form ...

  8. 卸载iptables 小心了!!怎么关闭和卸载iptables

    千万千万不要使用下面的命令卸载iptables yum remove iptables 这样操作会卸载掉很多系统必要的组件,那就开不了机了,链接不上了.切记切记. 如果想永远停用,使用以下命令即可: ...

  9. MVC4中control的增删改查

    public class TestController : Controller { private LeaveEntities db = new LeaveEntities(); // // GET ...

  10. java 重写父类构造器