网络由下往上分为
物理层、数据链路层、网络层、传输层、会话层、表明层和运用层。
通过开端的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于运用层,
三者从本质上来说没有可比性,
socket则是对TCP/IP协议的封装和运用(程序员层面上)。
也能够说,TPC/IP协议是传输层协议,首要处理数据怎么在网络中传输,
而HTTP是运用层协议,首要处理怎么包装数据。
关于TCP/IP和HTTP协议的联络,网络有一段比较简单了解的介绍:
“咱们在传输数据时,能够只运用(传输层)TCP/IP协议,可是那样的话,假如没有运用层,便无法辨认数据内容。
假如想要使传输的数据有意义,则有必要运用到运用层协议。
运用层协议有许多,比方HTTP、FTP、TELNET等,也能够自己界说运用层协议。
WEB运用HTTP协议作运用层协议,以封装HTTP文本信息,然后运用TCP/IP做传输层协议将它发到网络上。”
而咱们平常说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket自身并不是协议,而是一个调用接口(API)。
通过Socket,咱们才干运用TCP/IP协议。
实际上,Socket跟TCP/IP协议没有必定的联络。
Socket编程接口在规划的时分,就期望也能习惯其他的网络协议。
所以说,Socket的呈现仅仅使得程序员更方便地运用TCP/IP协议栈罢了,是对TCP/IP协议的笼统,
然后形成了咱们知道的一些最基本的函数接口,比方create、listen、connect、accept、send、read和write等等。
网络有一段关于socket和TCP/IP协议联络的说法比较简单了解:
“TCP/IP仅仅一个协议栈,就像操作系统的运转机制相同,有必要要详细完结,一起还要供给对外的操作接口。
这个就像操作系统会供给规范的编程接口,比方win32编程接口相同,
TCP/IP也要供给可供程序员做网络开发所用的接口,这便是Socket编程接口。”
关于TCP/IP协议的相关仅仅,用博学多才来讲我想也不为过,单单查一下网上关于此类仅仅的材料和书本文献的数量就知道,
这个我计划会买一些经典的书本(比方《TCP/IP详解:卷一、卷二、卷三》)进行学习,今日就先总结一些根据根据TCP/IP协议的运用和编程接口的常识,也便是方才说了许多的HTTP和Socket。
CSDN上有个比较形象的描绘:HTTP是轿车,供给了封装或许显现数据的详细方式;Socket是发动机,供给了网络通讯的才能。
实际上,传输层的TCP是根据网络层的IP协议的,而运用层的HTTP协议又是根据传输层的TCP协议的,而Socket自身不算是协议,就像上面所说,它仅仅供给了一个针对TCP或许UDP编程的接口。
下面是一些经常在书面考试或许面试中碰到的重要的概念,特在此做摘录和总结。
一、什么是TCP衔接的三次握手
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状况,等候服务器承认;
第2次握手:服务器收到syn包,有必要承认客户的SYN(ack=j+1),一起自己也发送一个SYN包(syn=k),即SYN+ACK包,此刻服务器进入SYN_RECV状况;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送承认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状况,完结三次握手。
握手进程中传送的包里不包括数据,三次握手完毕后,客户端与服务器才正式开端传送数据。
抱负状况下,TCP衔接一旦树立,在通讯两边中的任何一方自动封闭衔接之前,TCP 衔接都将被一向坚持下去。
断开衔接时服务器和客户端均能够自动建议断开TCP衔接的恳求,断开进程需求通过“四次握手”(进程就不细写了,便是服务器和客户端交互,终究承认断开)
二、使用Socket树立网络衔接的进程
树立Socket衔接至少需求一对套接字,其间一个运转于客户端,称为ClientSocket ,另一个运转于服务器端,称为ServerSocket 。
套接字之间的衔接进程分为三个进程:服务器监听,客户端恳求,衔接承认。
1、服务器监听:服务器端套接字并不定位详细的客户端套接字,而是处于等候衔接的状况,实时监控网络状况,等候客户端的衔接恳求。
2、客户端恳求:指客户端的套接字提出衔接恳求,要衔接的方针是服务器端的套接字。
为此,客户端的套接字有必要首要描绘它要衔接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出衔接恳求。
3、衔接承认:当服务器端套接字监听到或许说接纳到客户端套接字的衔接恳求时,就呼应客户端套接字的恳求,树立一个新的线程,把服务器端套接字的描绘发给客户端,一旦客户端承认了此描绘,两边就正式树立衔接。
而服务器端套接字持续处于监听状况,持续接纳其他客户端套接字的衔接恳求。
三、HTTP链接的特色
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的根底,也是手机联网常用的协议之一,HTTP协议是树立在TCP协议之上的一种运用。
HTTP衔接最明显的特色是客户端发送的每次恳求都需求服务器回送呼应,在恳求完毕后,会自动开释衔接。从树立衔接到封闭衔接的进程称为“一次衔接”。
四、TCP和UDP的差异(考得最多。。快被考烂了我觉得- -\\)
1、TCP是面向链接的,尽管说网络的不安全不稳定特性决议了多少次握手都不能确保衔接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上确保了)确保了衔接的可靠性;
而UDP不是面向衔接的,UDP传送数据前并不与对方树立衔接,对接纳到的数据也不发送承认信号,发送端不知道数据是否会正确接纳,当然也不用重发,所以说UDP是无衔接的、不可靠的一种数据传输协议。
2、也正由于1所说的特色,使得UDP的开支更小数据传输速率更高,由于不用进行收发数据的承认,所以UDP的实时性更好。
知道了TCP和UDP的差异,就不难了解为何选用TCP传输协议的MSN比选用UDP的QQ传输文件慢了,但并不能说QQ的通讯是不安全的,
由于程序员能够手动对UDP的数据收发进行验证,比方发送方对每个数据包进行编号然后由接纳方进行验证啊什么的,
即使是这样,UDP由于在底层协议的封装上没有选用相似TCP的“三次握手”而完结了TCP所无法到达的传输功率。