Skip to content

Latest commit

 

History

History
60 lines (32 loc) · 9.98 KB

TCP,UDP,HTTP,HTTPS.md

File metadata and controls

60 lines (32 loc) · 9.98 KB

TCP, UDP, HTTP & HTTPS

TCP, UDP, HTTP & HTTPS

TCP、UDP、HTTP与HTTPS都是通信协议,在这里首先先介绍一下什么是通信协议。

什么是通信协议?

通信协议(communications protocol)是指双方实体完成通信或服务所必须遵循的规则和约定。通过通信信道和设备互连起来的多个不同地理位置的数据通信系统,要使其能协同工作实现信息交换和资源共享,它们之间必须具有共同的语言。交流什么、怎样交流及何时交流,都必须遵循某种互相都能接受的规则。这个规则就是通信协议。

什么是TCP?

TCP是Transmission Control Protocol的缩写,也就是传输控制协议。它是一种面向连接的、可靠的、基于字节流的[传输层]通信协议。主要解决数据如何在网络中如何传输的,是一种长连接。建立一个TCP连接需要有三次握手,而终止一个TCP连接需要有4次握手,这是由TCP的半关闭(half-close)造成的。TCP包头的最小长度为20字节。

建立连接的三次握手

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。TCP一旦连接起来,在客户端和服务端任何一方主动关闭连接之前,TCP连接都将被一直保持下去。断开连接时,服务器和客户端都可以主动发起断开TCP连接的请求。简单来说,第一次握手就是客户端向服务器问我可以发送数据吗;第二次握手就是服务器回答说可以;第三次握手就是客户端向服务器说那我要开始发送数据了,此时客户端和服务器都准备好传输数据了,三次握手就完成了。

断开连接的四次握手

(1) 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。(2) 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。(3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。(4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。

什么是UDP?

UDP是User Datagram Protocol的缩写,也就是用户数据报协议。它与TCP相对应,是一种面向无连接的、不可靠的数据报传输协议,即不与对方建立连接,就直接就把数据包发送过去,因此缺乏可靠性。由于缺乏可靠性,UDP应用一般必须允许一定量的丢包、出错和复制。UDP简单总结起来就是下面的几点:(1) UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

TCP与UDP的区别

(1)TCP是需要连接的传输协议(长连接),UDP是不需要连接的传输协议;(2)TCP对系统资源要求较多,UDP要求较少;(3)TCP的程序结构较复杂,UDP程序结构较简单;(4)TCP是流模式,UDP是数据报模式 ;(5)TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

什么是HTTP?

HTTP是HyperText Transfer Protocol的缩写,也就是超文本传输协议。HTTP是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。HTTP协议的主要特点可概括如下:1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP协议之Get和Post

Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操作。 我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.

GET和POST的区别

  1. GET提交的数据会放在URL之后,以问号(?)分割URL和传输数据,参数之间以符号&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。
  2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。
  3. GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值,也就是说Get是通过地址栏来传值,而Post是通过提交表单来传值。
  4. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码,相比之下POST更安全。

什么是HTTPS?

HTTP是Secure Hypertext Transfer Protocol的缩写,也就是安全超文本传输协议。它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。

HTTP与HTTPS的区别

一、HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。二、HTTP是超文本传输协议信息是明文传输,HTTPS则是具有安全性的ssl加密传输协议。三、HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。四、HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。五、在OSI 网络模型中,HTTP和HTTPS都工作于应用层。

Socket

Socket是为了实现通信过程而建立成来的通信管道,其真实的代表是客户端和服务器端的一个通信进程,双方进程通过Socket进行通信,而通信的规则采用指定的协议。Socket只是一种连接模式,不是协议,TCP、UDP,简单的说(虽然不准确)是两个最基本的协议,很多其它协议都是基于这两个协议如,HTTP就是基于TCP的,.用Socket可以创建TCP连接,也可以创建UDP连接,这意味着,用Socket可以创建任何协议的连接,因为其它协议都是基于此的。实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。

TCP/IP

TCP/IP是一个协议组,分为网络层、传输层、应用层。在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层有TCP协议和UDP协议。在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。