优化TCP/IP,HTTP,Https,Socket,websocket,弱网及网络协议(概念)

 用户在浏览器输入网址,通过http协议发出去,网址经过DNS域名解析,解析成指定的ip地址,并在80端口上监听用户的请求。服务器监听到请求之后,会以三种方式返回给客户端:HTML、XML、JSON
 URL的全称是Uniform Resoure Locator,统一资源定位器。
 URN的全称是uniform resource name,统一资源命名。
 URI是一个更加抽象的概念,定义了资源的唯一性标识,而URL与URN是他的两种实现。前者根据具体位置定位资源,后者根据名称定位资源。而HTTP协议处理的基本上都是URL。URI的全称是Uniform Resource Identifier,统一资源标识符。

现代互联网的TCP拥塞控制(CC)算法评谈- https://blog.csdn.net/dog250/article/details/81973915

--  TCP传输和UDP不一样,TCP传输是流式的,必须先建立连接,然后数据流沿已连接的线路(虚电路)传输。因此TCP的数据
流不会像UDP数据报一样,每个数据报都要包含目标地址和端口,因为每个数据报要单独路由。TCP传输则只需要在建立连
接时指定目标地址和端口就可以了。
 形象的讲,TCP就像打电话,UDP就像发电报。宏观上来看UDP是不分客户端和服务端的。通信双方是平等的。微观上来
讲只相对一个报文,发送端是客户端,监听端是服务端。发送端把数据报发给路由器就像把电报发给了邮局,后面的事情
就是发送者无法控制,也无从知晓的了。所以说是不可靠的,可能会出现报文丢失而无从知晓。就像每张电报都要有收件
人一样,每个数据报都要有目的地址和端口。
  而TCP每次连接都是分客户端和服务端的。连接的发起者(相当与拨号打电话的人)是客户端,监听者(相当于在电话边等
着接电话的人)是服务端。发起者指定要连接的服务器地址和端口(相当于拨号),监听者通过和发起者三次握手建立连接(
相当于听到电话响去接电话)。建立连接后双方可以互相发送和接受数据(打电话)。

  IP 协议提供了主机和主机间的通信。TCP 协议在 IP 协议提供的主机间通信功能的基础上,完成这两个主机上进程对
进程的通信。有了 IP,不同主机就能够交换数据。但是,计算机收到数据后,并不知道这个数据属于哪个进程(简单讲
,进程就是一个正在运行的应用程序)。TCP 的作用就在于,让我们能够知道这个数据属于哪个进程,从而完成进程间的
通信。为了标识数据属于哪个进程,我们给需要进行 TCP 通信的进程分配一个唯一的数字来标识它。这个数字,就是我
们常说的端口号。在进行通信前,通信双方需要先经过一个三次握手的过程。三次握手完成后,连接便建立了。这时候我
们才可以开始发送/接收数据。(与之相对的是 UDP,不需要经过握手,就可以直接发送数据)。
  关于 TCP,还有诸如可靠性、流量控制、拥塞控制等非常有趣的特性。

 Socket 是 TCP 层的封装,通过 socket,我们就能进行 TCP 通信。
在客户端连接成功时,一个有多少个 socket 存在?答案是 3 个 socket。客户端一个,服务端有两个。在 Java 的 SDK
中,socket 的共有两个接口:用于监听客户连接的 ServerSocket 和用于通信的 Socket。使用 socket 的步骤如下:
 1.创建 ServerSocket 并监听客户连接
 2.使用 Socket 连接服务端
 3.通过 Socket 获取输入输出流进行通信

Socket 长连接的实现- https://github.com/Jekton/Echo

> ISO七层协议体系:
    网络七层:物数网传会表应.分别为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层.其中,底层三层:物理层,数据链路层,网络层是网络工程师研究的对象,而其它四层,是用户面向和关心的问题.
7 应用层 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP
6 表示层 例如XDR、ASN.1、SMB、AFP、NCP
5 会话层 例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets
4 传输层 例如TCP、UDP、RTP、SCTP、SPX、ATP、IL
3 网络层 例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25
2 数据链路层 例如以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP
1 物理层 例如线路、无线电、光纤、信鸽

> Http,Https

-- HTTP协议发展的趋势主要是两个方向:效率和安全
  HTTP协议发展至今已经有二十多年的历史,整个发展的趋势主要是两个方向:效率和安全。效率方面,从HTTP1.0的一次请求一个连接,到HTTP1.1的连接复用,到SPDY/HTTP2的多路复用,到QUIC/HTTP3的基于UDP传输,在效率方面越来越高效。安全方面,从HTTP的明文,到HTTP2强制使用TLSv1.2,到QUIC/HTTP3强制使用TLSv1.3,越来越注重数据传输的安全性。总而言之,HTTP协议的发展对用户是友好的,但是对开发者而言却不那么友善。

-- 深度解密 HTTP 通信细节- https://mp.weixin.qq.com/s/xU8X2gF_M_9_qzqbBdr4xQ
  用wireshark和tcpdump来分析TCP的“三次握手,四次挥手”。
  HTTP是应用层协议,TCP是传输层协议。HTTP底层仍然采用TCP进行传输数据。TCP为HTTP提供了一层可靠的比特传输通道。HTTP一般交换的数据都不大,而每次连接都要进行TCP三次握手,很大一部分时间都消耗在这上面,有时候甚至能达到50%。如果能复用连接,就可以减少由于TCP三次握手所带来的时延。
  HTTP 1.1默认开启keep-alive机制。
  为了安全起见,管道化的连接只适合“幂等”的请求,一般我们认为:GET/HEAD/PUT/DELETE/TRACE/OPTIONS等方法都是幂等的。

-- 优化Http/TCP:优化TCP,提高HTTP效率
http应用优化和加速说明-负载均衡- https://www.cnblogs.com/kevingrace/p/6137975.html
 (开启Gzip压缩)那些没有经过压缩的http会话都是走了1.0的协议,相反经过压缩的http会话都是走了http1.1协议。官方在做gzip压缩时,默认情况下只对走http1.1的会话进行压缩,如果需要压缩1.0对应的会话,需要修改默认配置。修改后,会少走一半的tcp数据包,
 尤其是在HTTP协议的优化和加速方面,一些技术逐渐发展成熟,如:TCP连接复用、内容缓存、TCP缓冲、HTTP压缩、SSL加速等。
 HTTP要发送请求传送报文时,会以流的形式将报文数据内容通过一条打开的TCP链接按序传输,TCP收到数据流之后,会将数据流砍成段的小数据块,并将段封装在IP数据包里传输。

- HTTPS和HTTP的区别主要为以下四点:
一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

-- 影响http时延的主要原因:
 第一:确定IP地址和端口号,如果最近访问,就会有网络cache缓存,否则DNS解析时间较长;
 第二:TCP建立的时延,HTTP是在TCP协议的上层,HTTP性能很大程度上取决于TCP通道的性能;
 第三:TCP连接建立好后,发送HTTP请求或从TCP连接读取报文;
 第四:回送HTTP响应。

-- HTTP和REST:
REST是什么,为什么它对于HTTP协议和web应用很重要。
设计REST风格API的最佳实践。POST/GET请求。
学习如何使用Chrome DevTools会非常有用。
SSL证书是什么。
HTTP/2 & SPDY (optional).HTTP2和SPDY(可选的)。
WebSockets, Web Workers, Service WorkersService Workers(都是可选的).

--  网络协议
关于STUN和TURN协议,有个开源实现- https://github.com/coturn/rfc5766-turn-server

--  请求头和响应头,节省流量,请求和响应更快, Http的statusCode,Session,Cookies,Domain
Http请求、Http响应、 Socket- http://uule.iteye.com/blog/2188813
HTTP请求头和响应头部包括的信息有哪些?- http://www.bubuko.com/infodetail-1969998.html  http://www.cnblogs.com/hxc555/p/6506154.html
如何减少请求头的数据?节省流量? Socket能节省流量吗?Socket请求头和响应头?

  HTTP头部,HTTP2.0之类???HTTP1.0 HTTP 1.1 HTTP 2.0主要区别??
HTTP 请求消息头部实例- https://www.cnblogs.com/aliang1992/p/6049578.html
https本地证书实现(安卓-java)- http://blog.csdn.net/qq_31463999/article/details/79231764

--  弱网搭建,弱网的区别及应用
App在弱网下的可用性,环境搭建- http://hugozhu.myalert.info/2015/03/28/59-use-raspberrypi-to-build-an-augmented-traffic-control-system.html

-- HTTP连接
HTTP 1.1与HTTP 1.0的比较- http://blog.csdn.net/zxm317122667/article/details/53234576
Http2.0那点事- http://blog.csdn.net/zxm317122667/article/details/53234585
HTTP/2 发展历程-- https://coyee.com/article/10917-journey-to-http-2

  HTTP是基于TCP/IP的应用层通信协议,它是客户端和服务器之间相互通信的标准。它规定了如何在互联网上请求和传输内容。通过应用层协议,我的意思是,它只是一个规范了主机(客户端和服务器)如何通信的抽象层,并且它本身依赖于TCP/IP来获取客户端和服务器之间的请求和响应。默认的TCP端口是80端口,当然,使用其他端口也是可以的。然而,HTTPS使用的端口是443端口。
  HTTP/1.0的主要缺点之一是,你不能在每个连接中发送多个请求。也就是说,每当客户端要向服务器端请求东西时,它都会打开一个新的TCP连接,并且在这个单独请求完成后,该连接就会被关闭。且对于下个需求时,它必须再创建一个新的连接。为什么会如此糟糕呢?好吧,来让我们做个假设,假设你需要访问一个包含10张图片、5个样式表和 5个JS文件的网页,这是一个共20项内容要请求的网页。由于服务器会在每个请求完成后将连接关闭,所以,这将会有一系列的20个独立的连接,每个项目均有一个单独的连接。因为三次握手和其后的缓慢启动机制,若每次请求都创建一个新的TCP连接,这就会带来明显的性能损失,最终的结果就是,这些大量的连接会导致严重的性能下降。
  HTTP最显著的特点:客户端发送请求都需要服务器端回送响应.请求结束后,主动释放链接.HTTP是一种短连接.通常的做法是,不需要任何数据,也要保持每隔一段时间向服务器发送"保持连接"的请求.这样可以保证客户端在服务器端是"上线"状态.

路由汇聚的计算方式- http://blog.csdn.net/qq_25827845/article/details/70946185
子网掩码的两种计算方式- http://blog.csdn.net/qq_25827845/article/details/70946041

-- HTTP(s)连接
 -短连接:
    连接->传输数据->关闭连接;
    HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
    也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。
 -长连接:
    连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。
    长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。

- http的长连接:
    HTTP也可以建立长连接的,使用Connection:keep-aliveHTTP 1.1默认进行持久连接。HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌似最新的 http1.0 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的.

   HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议,它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的安全全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。

-- 互联网的https通信安全,建立在SSL/TLS协议之上:
 SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
 TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。
TLS 1.2相当于SSL 3.2。

-- https和http的区别:
https协议需要到ca申请证书,一般免费证书很少,需要交费。
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全

-- https解决的问题:
1.信任主机的问题. 采用https 的server 必须从CA 申请一个用于证明服务器用途类型的证书. 改证书只有用于对应的server 的时候,客户度才信任次主机. 所以目前所有的银行系统网站,关键部分应用都是https 的. 客户通过信任该证书,从而信任了该主机. 其实这样做效率很低,但是银行更侧重安全. 这一点对我们没有任何意义,我们的server ,采用的证书不管自己issue 还是从公众的地方issue, 客户端都是自己人,所以我们也就肯定信任该server.
2.通讯过程中的数据的泄密和被窜改
 1)一般意义上的https, 就是 server 有一个证书.
  a) 主要目的是保证server 就是他声称的server. 这个跟第一点一样.
  b) 服务端和客户端之间的所有通讯,都是加密的.
    i. 具体讲,是客户端产生一个对称的密钥,通过server 的证书来交换密钥. 一般意义上的握手过程.
    ii. 加下来所有的信息往来就都是加密的. 第三方即使截获,也没有任何意义.因为他没有密钥. 当然窜改也就没有什么意义了.
 2)少许对客户端有要求的情况下,会要求客户端也必须有一个证书.
  a) 这里客户端证书,其实就类似表示个人信息的时候,除了用户名/密码, 还有一个CA 认证过的身份. 应为个人证书一般来说上别人无法模拟的,所有这样能够更深的确认自己的身份.
  b) 目前少数个人银行的专业版是这种做法,具体证书可能是拿U盘作为一个备份的载体.

 HTTPS 一定是繁琐的.
 a) 本来简单的http协议,一个get一个response. 由于https 要还密钥和确认加密算法的需要.单握手就需要6/7 个往返.
   i. 任何应用中,过多的round trip 肯定影响性能.
 b) 接下来才是具体的http协议,每一次响应或者请求, 都要求客户端和服务端对会话的内容做加密/解密.
   i. 尽管对称加密/解密效率比较高,可是仍然要消耗过多的CPU,为此有专门的SSL 芯片. 如果CPU 信能比较低的话,肯定会降低性能,从而不能serve 更多的请求.
   ii. 加密后数据量的影响. 所以,才会出现那么多的安全认证提示.

-- 客户端将 HTTPS 请求结果作为日志输出,开发与测试同学可以针对日志分析接口问题;
采用类似 Chuck 项目(https://github.com/jgilfelt/chuck)的思路,为 OkHttp 添加 interceptor 以收集请求结果,并将其以 UI 形式直观地展示出来。

> websocket原理,优点,持久化连接
  socket编程中,socketAPI允许用户创建TCP的端点数据结构,将这些端点与远程服务器的TCP端点连接,并对数据流进行读写,TCP API隐藏了所有底层网络协议的握手细节以及TCP数据流和IP分组之间的分段和重装细节。java或C实现Ping功能?(如 Ping www.********.com)
  websocket不仅节约了header的问题(websocket的head信息只有短短的2个字节)。更加重要的是是通信的稳定性.
在github上有一个js库(https://github.com/joewalnes/reconnecting-websocket
android 网络编程- http://blog.csdn.net/xyz_lmn/article/category/919453
Android 支持网络协议以及简单用法 -- http://xfenglin.com/a/12006998475.html
  Android对网络编程提供3中接口,即:Java接口,Apache接口,Android接口。Android提供了对 HTTP,SSL,Cookie,DHCP等协议的封装,并支持套接字编程,同时对UTI也提供了支持。另外,还提供了连接管理器和WiFI管理器来增强对网络的支持。

  WebSocket解决了HTTP的这几个难题。首先,被动性,当服务器完成协议升级后(HTTP->Websocket),服务端就可以主动推送信息给客户端啦。解决了上面同步有延迟的问题。
  解决服务器上消耗资源的问题:其实我们所用的程序是要经过两层代理的,即HTTP协议在Nginx等服务器的解析下,然后再传送给相应的Handler(php等)来处理。简单地说,我们有一个非常快速的 接线员(Nginx) ,他负责把问题转交给相应的 客服(Handler) 。Websocket就解决了这样一个难题,建立后,可以直接跟接线员建立持久连接,有信息的时候客服想办法通知接线员,然后接线员在统一转交给客户。
  由于Websocket只需要一次HTTP握手,所以说整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性,服务端会一直知道你的信息,直到你关闭请求,这样就解决了接线员要反复解析HTTP协议,还要查看identity info的信息。创建socket需要进行3次握手,而释放socket需要2次握手(或者是4次)。

-- webSocket优点:
 1. 节约带宽。不停地轮询服务端数据这种方式,使用的是http协议,head信息很大,有效数据占比低, 而使用WebSocket方式,头信息很小,有效数据占比高。
 2. 无浪费。 轮询方式有可能轮询10次,才碰到服务端数据更新,那么前9次都白轮询了,因为没有拿到变化的数据。 而WebSocket是由服务器主动回发,来的都是新数据。
 3. 实时性,考虑到服务器压力,使用轮询方式不可能很短的时间间隔,否则服务器压力太多,所以轮询时间间隔都比较长,好几秒,设置十几秒。 而WebSocket是由服务器主动推送过来,实时性是最高的

-- WebSocket实现持久化连接
 Websocket是一个持久化的协议,Upgrade: websocket ; Connection: Upgrade。一个使用WebSocket应用于视频的业务思路如下:
1.使用心跳维护websocket链路,探测客户端端的网红/主播是否在线
2.设置负载均衡7层的proxy_read_timeout默认为60s
3.设置心跳为50s,即可长期保持Websocket不断开

--  WebSocket/Socket的区别
 http 为短连接,单向通信 HTTP连接使用的是"请求-响应"方式,不仅在请求时建立连接,而且客户端向服务器端请求后,服务器才返回数据。HTTP是非状态性的。
1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
  WebSocket是HTML5出的东西 也就是说HTTP协议没有变化 但HTTP是不支持持久连接的。Websocket其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已。Websocket是基于HTTP协议的,或者说借用了HTTP的协议来完成一部分握手。
  Websocket的核心:Upgrade: websocket;Connection: Upgrade 。 long poll 和 ajax轮询。可以把 WebSocket 看成是 HTTP 协议为了支持长连接所打的一个大补丁,它和 HTTP 有一些共性,是为了解决 HTTP 本身无法解决的某些问题而做出的一个改良设计。
  WebSocket 的设计者们也早已想过。就是让服务器和客户端能够发送 Ping/Pong Frame(RFC 6455 - The WebSocket Protocol,https://tools.ietf.org/html/rfc6455#section-5.5.2)。这种 Frame 是一种特殊的数据包,它只包含一些元数据而不需要真正的 Data Payload,可以在不影响 Application 的情况下维持住中间网络的连接状态。(Ping/Pong Frame,Request/Response)
  WebSocket是HTML5下一种新的协议。它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的。它与HTTP一样通过已建立的TCP连接来传输数据,但是它和HTTP最大不同是:
  WebSocket是一种双向通信协议。在建立连接后,WebSocket服务器端和客户端都能主动向对方发送或接收数据,就像Socket一样; WebSocket需要像TCP一样,先建立连接,连接成功后才能相互通信。
-- 一个使用WebSocket应用于视频的业务思路如下:
1.使用心跳维护websocket链路,探测客户端端的网红/主播是否在线

2.设置负载均衡7层的proxy_read_timeout默认为60s
3.设置心跳为50s,即可长期保持Websocket不断开。

  WebSocket同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的。
  微信小程序中的WebSocket。WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。
  Socket是传输控制层协议,WebSocket是应用层协议。
  网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
 建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
  Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
  套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
   Socket长链接,双向(双工)通信,Socket 是对 TCP/IP 协议的封装,Socket 只是个接口不是协议,通过 Socket 我们才能使用 TCP/IP 协议,除了 TCP,也可以使用 UDP 协议来传递数据。Socket的Tcp/Udp连接。socket三种类型:Datagram socket(使用 UDP协议), stream socket(使用 TCP协议), Raw socket或Raw IP socket(路由器或其他网络设备使用)。
  Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。
  Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

-- WebSocket与HTTP的关系:
  相同点
1. 都是一样基于TCP的,都是可靠性传输协议。
2. 都是应用层协议。
  不同点
1. WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。
2. WebSocket是需要握手进行建立连接的。

HTTP 协议:超文本传输协议,对应于应用层,用于如何封装数据.
TCP/UDP 协议:传输控制协议,对应于传输层,主要解决数据在网络中的传输。
IP 协议:对应于网络层,同样解决数据在网络中的传输。

> TCP/IP
-- TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。 ip协议:对应于网络层.
 1.在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
 2.在传输层中有TCP协议与UDP协议。 tcp协议:传输控制协议,对应于传输层..
 3.在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。 http协议:超文本传输协议, 对应于应用层.
TCP/IP是传输层协议,主要解决数据在网络中的传输.Http是应用层的协议,用于如何封装数据.传输数据的时候,只使用TCP/IP协议(传输层).如果没有应用层来识别数据内容,传输后的协议都是无用的. 应用层协议很多,FTP,HTTP,TELNET等,可以自己定义应用层协议.WEB使用HTTP作传输层协议.以封装HTTP文本信息,然后使用TCP/IP做传输层协议,将数据发送到网络上.
 HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。HTTP之请求响应内容详解- http://blog.csdn.net/qq_25827845/article/details/54562339
   Socket是对TCP/IP协议的封装,Socket只是个接口(API),不是协议,通过Socket,我们才能使用TCP/IP协议.当然,除了TCP,也可以使用UDP协议来传递数据.Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,一组接口,把复杂的TCP/IP协议族隐藏在Socket接口后面。所以HTTP就是TCP/IP应用层的协议。Socket是他们的软件抽象层。

-- TCP 与 UDP 的区别:TCP是面向连接的,可靠的字节流服务;UDP是面向无连接的,不可靠的数据报服务。
TCP协议和UDP协议的区别是什么,UDP不需要三次握手协议。
 TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接。而UDP是无连接的
 TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。
 TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。
 TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率
 TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。
 TCP面向的是字节流的服务,UDP面向的是报文的服务。TCP三次握手与四次挥手。

 TCP是面向连接的,建立连接之后才发送数据,而UDP不管对方存不存在都会发送数据,TCP有确认机制,接收端每收到一个正确包都会回应给发送端。超时或者数据包不完整的话发送端会重传。UDP没有。因此可能丢包。
 TCP无边界:客户端分多次发送数据给服务器,若服务器的缓冲区够大,那么服务器端会在客户端发送完之后一次性接收过来,所以是无边界的,UDP有边界:客户端每发送一次,服务器端就会接收一次,即发送多少次就会接收多少次,因此是有边界的
 TCP需要三次握手,有流量控制,拥塞控制UDP没有,所以UDP快

 1、什么时候使用TCP,对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 eg: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输
 2、什么时候使用UDP,对网络通讯质量要求不高,速度要求快时,使用。eg:QQ语音 QQ视频 TFTP
QQ采用的是P2P技术,不需要服务器中转。多播的信息一定要用udp实现,因为tcp只支持一对一通信。

> TCP协议三次握手和四次挥手
TCP协议的学习(三)TCP协议三次握手及攻击- https://blog.csdn.net/qq_34501940/article/details/51113965
TCP/IP协议三次握手和四次挥手大白话解说- https://blog.csdn.net/li0978/article/details/52598121
理论经典:TCP协议的3次握手与4次挥手过程详解- https://blog.csdn.net/omnispace/article/details/52701752
-- TCP协议三次握手:
 第一次握手:客户端主动打开连接,发送带有SYN=1,ACK=0的TCP报文到服务器,初始序号X,保存在包头的序列号
(Sequence Number)中,同时客户端进入SYN_SEND状态。 
 第二次握手:服务器收到SYN包,确认SYN(ack=x+1)将确认序号(Acknowledgement Number)设置为客户的ISN加1以.即X
+1,自己发送一个SYN(seq=y),同时服务器进入SYN_RECV状态 
 第三次握手: 客户端收到服务器的SYN+ACK, 回复ACK=1, ack=y+1,在数据段放写seq+1(即ISN+1)。同时端和服务器
进入ESTABLISHED状态,完成三次握手。

-- TCP 4次挥手过程详解:
 第一次挥手:
Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
 第二次挥手:
Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入
CLOSE_WAIT状态。
 第三次挥手:
Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
 第四次挥手:
Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状
态,完成四次挥手。

-- TCP连接
要想明白Socket,必须要理解TCP连接.
 建立TCP连接的"三次握手":
第一次:客户端向服务器发送SYN包(syn=j),同时自己处于SYN_SEND状态.
第二次:服务器端收到SYN包后,必须确认客户的SYN(syn=j+1),同时也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态.
第三次:客户端收到服务器发来的SYN+ACK包,就向服务器发送SYN(syn=k+1),发送完毕后,服务器和客户端都进入ESTABLISHED状态.完成三次握手.握手过程中,并不传输数据.在握手后,服务器与客户端才开始传输数据,理想状态下,TCP连接一旦建立,在通讯双方中的任何一方主动断开连接之前,TCP连接会一直保持下去.

-- TCP/IP:
  代表传输控制协议/网际协议,指的是一系列协议,TCP/IP 模型在 OSI 模型的基础上进行了简化,变成了四层,从下到上分别为:网络接口层、网络层、传输层、应用层。
-- TCP详解:三次握手与四次挥手,一个TCP连接必须要经过三次“对话”才能建立起来。
三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-open connect).SYN攻击是一个典型的DDOS攻击。检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击.

四次挥手过程如下:1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。 
 2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。 
 3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。 
 4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

> Socket原理
Socket连接,至少需要一对套接字,分为clientSocket,serverSocket.连接分为3个步骤:
  服务器监听:服务器并不定位具体客户端的套接字,而是时刻处于监听状态.
  客户端请求:客户端的套接字要描述它要连接的服务器的套接字.提供地址和端口号,然后向服务器套接字提出连接请求.
  连接确认:当服务器套接字收到客户端套接字发来的请求后,就响应客户端套接字的请求,并建立一个新的线程,把服务器端的套接字的描述发给客户端,一旦客户端确认了此描述,就正式建立连接.而服务器套接字继续处于监听状态,继续接收其他客户端套接字的连接请求.

-- Socket连接与TCP连接
  创建Socket连接的时候,可以指定传输层协议.可以是TCP或者UDP,当用TCP连接,该Socket就是个TCP连接.
  TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。也正由于UDP无连接的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了.

-- Socket连接与HTTP连接
  通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通讯双方开始互发数据内容,直到双方断开连接.在实际应用中,由于网络节点过多,在传输过程中,会被节点断开连接.因此要通过轮询高速网络,该节点处于活跃状态.HTTP连接使用的是"请求-响应"方式,不仅在请求时建立连接,而且客户端向服务器端请求后,服务器才返回数据.很多情况下,都是需要服务器端向客户端主动推送数据,保持客户端与服务端的实时同步.若双方是Socket连接,可以由服务器直接向客户端发送数据.若双方是HTTP连接,则服务器需要等客户端发送请求后,才能将数据回传给客户端.因此,客户端定时向服务器端发送请求,不仅可以保持在线,同时也询问服务器是否有新数据,如果有就将数据传给客户端.

> ip地址+协议+端口号唯一标示网络中的一个进程。协议族抽象图:

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值