网卡/HTTP连接和socket连接的区别

所有系统I/O分为两个阶段:等待就绪,操作。读函数分为等待系统可读和真正的读。写函数分为等待网卡可写和真正的写。

数据如何发送?

1.应用程序将数据写入进程的内存地址空间。

2.应用程序通过系统函数接口向内核发出系统调用,系统内核将用户态内存数据复制到内核缓冲区。

3.内核通知网卡控制器,网卡控制器将内核缓冲区数据复制到网卡缓冲区。

4.网卡使用内部特定物理装置将网卡缓冲区中数据转换成电信号或光信号然后发送到线路中。

 

 一个用户向服务器连续进行1000次请求的过程中,任何时刻服务器的网卡接收缓冲区中只有来自该用户的一个请求。而100个用户同时向服务器分别进行10次请求的过程中,服务器网卡接收缓冲区最多有100个等待处理的请求。

 如果没有猜错,一台服务器接收请求的能力取决于网卡的性能。网卡的接收缓冲区的大小决定了最多能接收多少请求,当然也跟请求中数据的大小有关。超出了网卡接收缓冲区的范围就会出现春节买火车票的情况吧。。

 

HTTP超文本传输协议和socket接口:

首先HTTP不是连接,http只是一个基于可靠连接的应用层的超文本传输协议(只是应用层对数据形式的一种格式规定而已,使用socket接口可以实现http请求,只要java的socket发送的数据格式符合http协议要求即可,当然socket还可以实现ftp)。实现可靠传输的网络都可以使用HTTP协议,不只是实现TCP可靠连接的网络才能用,当然使用TCP可靠连接来实现可靠连接的网络比较多。

socket也不是连接,socket接口是TCP/IP协议组排除应用层后的封装调用(不封装应用层使用户选择时更具灵活性),是面向程序员的不包含应用层的TCP/IP协议组的实现。调用socket接口可实现TCP/IP体系的网络互连功能。因此使用socket接口调用TCP/IP协议实现联通性时既可以使用TCP可靠连接,也可以使用UDP不可靠连接。直接在程序中用IO流输入输出即可实现数据传输,具体怎么封装数据可自己选择某个应用层协议或自定义来实现。

java中socket的核心API有Socket类(传输层默认使用TCP可靠连接),ServerSocket类(服务端的Socket),DataGramSocket类(传输层使用UDP协议)。

 

 

传输层的连接协议目前知道的只有TCP可靠传输和UDP不可靠传输

 

posted @ 2017-08-05 21:34  新生的小心情  阅读(470)  评论(0编辑  收藏  举报