1.TPC/IP协议是传输层协议,主要解决数据在网络中如何传输,而HTTP是应用层协议,这主要解决如何打包数据。关于TCP/IP和HTTP协议的关系,网上有个比较通俗易懂的介绍:“我们在传输数据的时候,只能使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,就无法识别数据内容,要想使传输的数据有意义,就必须使用应用层协议,应用层协议有很多,如HTTP、FTP、TELNET等,也可以自己定义应用层协议,WEB使用HTTP协议作为应用层协议封装HTTP文本信息,然后使用TCP/IP作为传输层协议发送到网络。Github术语TCP/IP代表传输控制协议/互联网协议,指的是一系列协议。“IP”代表互联网协议,TCP和UDP使用它来将数据包从一个网络传输到另一个网络。将IP视为一种高速公路,允许其他协议在其上行驶并找到通向其他计算机的出路。TCP和UDP是高速公路上的“卡车”,它们承载的货物是HTTP、文件传输协议FTP等协议。大家应该明白,TCP和UDP是FTP、HTTP和SMTP。尽管TCP和UDP都用于传输其他协议,但它们有一个显着区别:TCP提供有保证的数据传输,而UDP则不能。这意味着TCP有一种特殊的机制来确保数据从一个端点安全无误地传递到另一个端点,而UDP不提供任何此类保证。HTTP(超文本传输??协议)是一种使用TCP在两台计算机(通常是Web服务器和客户端)之间传输信息的协议。客户端使用网络浏览器向网络服务器发起HTTP请求,网络服务器将请求的信息发送给客户端。下图试图展示不同的TCP/IP等协议在原始OSI模型中的位置:1、HTTP协议的几个重要概念1)连接(Connection):一个传输层的实际循环,建立在两个相互通信的应用程序之间的基础。2)消息(Message):HTTP通信的基本单位,包括一个结构化的八位字节序列并通过连接传输。3)请求(Request):客户端向服务器的请求信息,包括对资源应用的方法、资源的标识、协议的版本号4)响应(Response):服务器返回的消息包括HTTP协议号的版本、请求的状态(例如“成功”或“未找到”)以及文档的MIME类型。5)资源:由URI标识的网络数据对象或服务。6)实体:数据资源的特殊表示或服务资源的反映,可以包裹在请求或响应消息中。实体包括实体头信息和实体本身的内容。7)客户端(Client):为发送请求而建立连接的应用程序。8)用户代理(Useragent):初始化一个请求客户端。这些是浏览器、编辑器或其他用户工具。9)服务器(Server):接受连接并向请求返回信息的应用程序。10)源服务器:是可以驻留或创建给定资源的服务器。11)代理(Proxy):一种中间程序,可以作为服务器或客户端为其他客户端建立请求。请求要么在内部进行,要么通过可能的翻译传递给其他服务器。代理必须在发送之前解释并在可能的情况下重写请求消息。代理通常充当穿过防火墙的客户端网关,代理还可以充当辅助应用程序来处理用户代理未通过协议完成的请求。12)网关(Gateway):充当其他服务器中介的服务器。与代理不同,网关接受请求就好像它是所请求资源的源服务器一样;发出请求的客户端不知道它正在处理一个网关。网关通常作为服务器端的门户通过防火墙,网关也可以作为协议翻译器来访问存储在非HTTP系统中的资源。13)通道(Tunnel):是一种中介程序,在两个连接之间充当中继。一旦激活,该通道就被认为不属于HTTP通信,尽管该通道可能是由HTTP请求发起的。当中继连接的两端都关闭时,通道消失。当Portal必须存在或中介无法解释中继通信时,通常会使用通道。14)缓存(Cache):响应信息的本地存储。2.客户端发出打开连接的请求后,向服务器的端口发送请求报文,完成发出请求的动作。HTTP/1.0请求报文格式为:请求报文=请求行(一般信息|请求头|实体头)CRLF[实体内容]请求行=方法请求URLHTTP版本号CRLF方法=GET|实体头头|发布|扩展方法URL=协议名+主机名+目录和文件名请求行中的方法描述了在指定资源中应该执行的操作。常用的方法有GET、HEAD和POST。不同的请求对象对应不同的GET结果,对应关系如下:对象GET结果文件内容程序执行结果程序数据库查询查询结果HEAD??要求服务器找到对象的元信息,而不是对象本身。邮政??将数据从客户端传输到服务器,请求服务器和CGI做进一步处理时使用POST方法。POST主要用于将FORM的内容以HTML文本形式发送,供CGI程序处理。一个请求的例子是:GEThttp://networking.zju.edu.cn/...networking.zju.edu.cn/zju/index.htmHTTP/1.0头信息也叫元信息,即信息的信息,使用元信息启用条件请求或响应。请求头??告诉服务器如何解释这个请求,主要包括用户可以接受的数据类型、压缩方式和语言。实体头??实体信息类型、长度、压缩方式、最后修改时间、数据有效期等。实体??请求或回复对象本身。3.发送响应在处理完客户端的请求后,服务器向客户端发送一个响应消息。HTTP/1.0的响应消息格式如下:响应消息=状态行(一般信息头|响应头|实体头)CRLF〔实体内容〕状态行=HTTP版本号状态码原因描述状态码表示响应类型1××reserved2××表示请求成功接收3××为了完成请求,客户端需要进一步细化请求4××客户端错误5××服务器错误响应头信息包括:服务程序名,通知客户端说请求的URL需要认证,请求的资源什么时候可以使用。4.关闭连接。客户端和服务器都可以通过关闭套接字来结束TCP/IP对话。二、TCP(TransmissionControlProtocol):1、TCP是一种面向连接的、可靠的传输层协议;TCP协议建立在不可靠的网络层IP协议之上,IP协议不能提供任何可靠性机制,TCP的可靠性完全靠自己实现;TCP采用的最基本的可靠性技术是:确认和超时重传机制、流量控制机制;1)超时重传是TCP协议保证数据可靠性的重要机制。原理是发送一定数据后启动一个定时器。如果在一定时间内没有收到发送数据报的ACK报文,那么就重新发送数据,直到发送成功。2)流量控制就是让发送速率不要太快,让接收方及时收到。流量控制可以使用滑动窗口机制来实现。(1)源端口和目的端口字段——socket(IP+端口号)。TCP数据包没有IP地址,那是IP层的事情。但是有源端口和目的端口。(2)序号SEQ——当前段的序号。(3)AcknowledgementresponsenumberAN——对方下一段期望收到的数据的第一个字节序号;(4)UrgentURG——当URG=1时,表示紧急指针字段有效。告诉系统此报文段中有紧急数据,应尽快发送(相当于高优先级数据);(5)确认ACK——当ACK=1时。表示确认号AN有效。(6)推送PSH(PuSH)——当接收TCP收到一个PSH=1的报文段时,会尽快将其投递给接收应用进程,而不是等到整个缓存都满了再投递;(7)复位RST(ReSeT)——当RST=1时,表示TCP连接出现严重错误(如主机崩溃或其他原因),必须释放连接,然后必须重新建立传输连接;(8)SynchronousSYN——SynchronousSYN=1表示这是一条连接请求报文。(9)终止FIN(Finish)——用来释放一个连接。FIN=1表示发送端数据已经发送完毕,需要释放传输连接;(10)Windowfield——占2个字节,用于让对方设置发送窗口的依据,单位为byte。窗口值为[0,216-1]之间的整数;(11)校验和——占用2个字节。检验和现场检验的范围包括表头和数据。计算校验和时,需要在TCP报文段前增加12字节的dummy部分(协议字段为6,表示TCP);(12)Urgentpointerfield——占16位,表示本段中一共有多少个字节的紧急数据(紧急数据放在本报文段数据的最前面);(13)optionfield——长度可变。①最大报文段长度MSS:MSS是指TCP连接建立时每个报文段可以携带的数据域的最大长度,发送和接收双发协商的通信(不是TCP报文的最大长度segment,butYes:MSS=TCPsegmentlength-TCPheaderlength),单位为字节(双方提供的MSS最小值就是本次连接的最大MSS值);②窗口扩展选项;③时间戳选项;④选择确认选项;2.TCP三次握手(非常重要)第一次握手:客户端向服务器发送一个请求报文段,其中同步位SYN=1,序号SEQ=x(表示传输时第一个数据字data段的序号为x),等待服务器确认;第二次握手:服务器收到客户端的请求,如果同意建立连接,则发回确认报文段,其中同步位SYN=1,确认号ACK=x+1,序列号序号=y;第三次握手:客户端收到服务器的确认报文后,需要给服务器确认,并向服务器发送确认包ACK(ack=y+1),完成三次握手。通过这样的三次握手,客户端和服务器建立了可靠的双工连接,开始传输数据。为了保证服务器能够收到客户端的信息并做出正确的响应,进行了前两次(firstandsecond)握手,为了保证客户端能够收到服务器的信息并做出正确的响应接下来的两次(secondandthird)handshakesareperformed作为响应。3、用户数据报协议(UserMessageProtocol)UDPUDP是一种无连接、不可靠的传输层协议;它提供有限的错误检查功能;目的是以最小的开销实现网络环境下的进程通信目的:随着网络技术的飞速发展,网络速度不再是传输的瓶颈。UDP协议以其简单、传输速度快等优势,在越来越多的场景中取代了TCP,例如网页浏览、流媒体、实时游戏、物联网等。1、网速的提升为UDP稳定性提供了可靠的网络保障CDN服务商Akamai(纳斯达克股票代码:AKAM)报告称,在2008年至2015年的七年间,各国平均网速从1.5Mbps提升至5.1Mbps,并且网速提升近4倍。随着网络环境的改善,网络传输的延迟和稳定性也会提高。UDP丢包率小于5%。如果采用应用层进行重传,则可以充分保证传输的可靠性。2.对比测试结果UDP性能优于TCP为了提高浏览速度,Google在TCP的基础上提出了SPDY协议和HTTP/2。谷歌在Chrome上试验了基于UDP的QUIC协议,传输速率降低到100ms以下。谷歌采用QUIC后,连接率可有效提升75%。Google搜索采用QUIC后,页面加载性能提升3%。YouTube采用QUIC后,重新缓冲的次数减少了30%。3、TCP设计过于冗余,速度难以进一步提升。TCP为了实现网络通信的可靠性,采用了复杂的拥塞控制算法,并建立了繁琐的握手过程和重传策略。由于TCP内置于系统协议栈中,因此对其进行改进极其困难。4、UDP协议以其简单、传输速度快等优点,在越来越多的场景中取代了TCP4.1。使用UDP协议进行网页浏览具有三个优点:可以简化握手过程,减少网络通信往返次数;可支持TLS,加密解密过程优化;发送和接收快速且无阻塞。4.2流媒体使用TCP。一旦一个包丢失,TCP会缓存后面的包,等待前面的包重传接收后再继续发送。延迟会越来越大。基于UDP的协议(如WebRTC)是一个很好的选择。2010年,谷歌通过收购GlobalIPSolutions获得了WebRTC(WebReal-TimeCommunication,网络实时通信)技术,用于提高网页的视频速率。4.3实时游戏对实时性要求严格时,使用自定义可靠的UDP协议,如Enet、RakNet(用户有sony网游、minecraft)等,自定义重传策略,可以减少包带来的延迟losstoMinimum,将网络问题对游戏玩法的影响降到最低。使用UDP的经典游戏,如FPS游戏Quake和CS,著名的游戏引擎Unity3D也使用了RakNet4。TCP和UDP的区别1.是否需要建立连接。UDP传输数据前不需要建立连接;TCP提供面向连接的服务;2.需要确认吗?确认消息必须提供可靠的、面向连接的传输服务。3、虽然UDP不提供可靠的传递,但在某些情况下UDP是最有效的工作方式;【UDP替代TCP】以及与IP层的连接:IP层只负责向节点发送数据,并不能区分以上不同的应用,所以TCP和UDP协议在它们的基础上增加了端口信息,每个端口标识节点上的应用程序。UPD协议除了增加端口信息外,基本上不对IP层的数据做任何处理。TCP协议还增加了更复杂的传输控制,如滑动数据传输窗口、接收确认和重传机制等,以实现数据的可靠传输。不管应用层看到什么样的稳定TCP数据流,下面传输的都是一个个IP数据包,需要通过TCP协议重新组装数据。5、TCP和UDP的适用场景。1.当需要在传输层实现可靠传输时使用TCP。2、UDP主要用于对高速传输和实时性要求高的通信或广播通信。以通过IP电话进行呼叫为例。如果使用TCP,数据在传输过程中丢失会被重发,从而保证来电语音的顺利传输。使用UDP,不会进行重传处理,所以不会出现语音到达延迟大的问题。即使丢失了部分数据,也只会影响一小部分的通话。大家注意点,别迷路了,以上就是本文的全部内容,能看到这里的都是人才。前面说了PHP的技术点很多,也是因为太多了,写的太多了,写完了也不会看太多,所以我这里整理成了PDF和文档,有需要的可以点击进入密码:想了解更多内容可以访问【比大厂】优质PHP架构师教程目录,只要会看,就可以保证你的薪水会上升到一个更高的水平(不断更新)。以上内容希望对大家有所帮助,很多PHPer在进阶的时候总会遇到一些问题和瓶颈。业务代码写多了,没有方向感,就不知道从哪里入手改进。我整理了一些这方面的资料,包括但不限于:高扩展、高性能、高并发、服务器性能调优、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务,Nginx等知识点进阶进阶干货需要的可以免费分享给大家,需要的可以加我的PHP技术交流群953224940
