UDP,TCP,HTTP一些了解

1 TCP

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP层是位于IP层之上,应用层之下的中间层。
不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交
换。
传输流程大致为:
-> 应用层向TCP层发送用于网间传输的、用8位字节表示的数据流
-> 然后TCP把数据流分区成适当长度的报文段
-> 之后TCP把结果包传给IP层
-> 然后由它来通过网络将包传送给接收端实体的TCP层,TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收
-> 然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传, TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

具体的实现:

  1. 应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据长度将保持不变。由TCP
    传递给IP的信息单位称为报文段或段。

  2. 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发
    这个报文段。当TCP收到发自TCP连接另一端的数据,它将发送一个确认。TCP有延迟确认的功能,在此功能没有打开,
    则是立即确认。功能打开,则由定时器触发确认时间点。

  3. TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)

  4. 既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必
    要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层

  5. 如果IP数据报发生重复,TCP的接收端必须丢弃重复的数据

  6. TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区
    所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出

2 UDP

UDP是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,在第四层——传输层,处于IP协议的上一层。

特性:

  1. 传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

  2. 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息

  3. UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。

  4. 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。

  5. UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表

  6. UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。

IP

IP协议是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小
的重新组装功能,以适应不同网络对包大小的要求。
IP不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用
报头的校验码,它不提供重发和流量控制。如果出错可以通过ICMP报告,ICMP在IP模块中实现。

HTTP

HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。HTTP 定义了与服务器交互的不同方法,最基本的方法
有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的
资源,而 HTTP 中的GET,POST,PUT,DELETE就对应着对这个资源的查,增,改,删4个操作。

状态码

HTTP 响应与 HTTP 请求相似,HTTP响应也由3个部分构成,分别是:

状态行
响应头(Response Header)
响应正文
状态行由协议版本、数字形式的状态代码、及相应的状态描述,各元素之间以空格分隔。

###状态码有如下几种类别:
第一个数字有五种可能的取值:
1xx: 指示信息—表示请求已接收,继续处理。
2xx: 成功—表示请求已经被成功接收、理解、接受。
3xx: 重定向—要完成请求必须进行更进一步的操作。
4xx: 客户端错误—请求有语法错误或请求无法实现。
5xx: 服务器端错误—服务器未能实现合法的请求。

常见的状态码
200 OK 客户端请求成功
301 Moved Permanently 请求永久重定向
302 Moved Temporarily 请求临时重定向
304 Not Modified 文件未修改,可以直接使用缓存的文件。
400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
404 Not Found 请求的资源不存在,例如,输入了错误的URL
500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。
503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。

其他参考软大神http详解

Socket

而通常说的Socket则是提供TCP/IP,UDP使用的一个接口,

TCP和UDP的区别

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP不保证可靠到达
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对一些实时应用很有用,如IP电话,实时视频会议等)
4、TCP首部开销20字节, UDP的首部开销小,只有8个字节
5、每一条TCP连接只能是点到点的,而UDP支持一对一,一对多,多对一和多对多的交互通信
6、TCP的逻辑通信信道是全双工的可靠信道,UDP不是

TCP和UDP的优劣

TCP

优点:
1、TCP是面向连接的,可靠的,有序的,在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源,通过数据校验保证发送和接收到的数据是一致的
缺点:
1、也是因为会有三次握手,所以会导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。
2、TCP在传递数据之前,要先建连接,这会消耗时间,效率低,占用系统资源高,

UDP

优点:
1、比TCP稍安全, UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,所以攻击者利用漏洞就少,
缺点:
1、不稳定,网络不好的时候很容易发生丢包的现象,导致数据无法传达,
2、UDP是无连接的,不可靠的,无序的,比如发送一串数字分组(1,2,3)可能接收到时就变成(1,0,0)或者(2,1,3)了,做UDP连接时需要自己做数据校验

UDP比TCP更容易穿越路由器防火墙