计算机网络

IO模型(epoll)--详解-01

主宰稳场 提交于 2019-11-29 15:35:32
写在前面   从事服务端开发,少不了要接触网络编程。epoll作为linux下高性能网络服务器的必备技术至关重要,nginx、redis、skynet和大部分游戏服务器都使用到这一多路复用技术。   本文会从网卡接收数据的流程讲起,串联起CPU中断、操作系统进程调度等知识;再一步步分析阻塞接收数据、select到epoll的进化过程;最后探究epoll的实现细节。目录: 一、从网卡接收数据说起 二、如何知道接收了数据? 三、进程阻塞为什么不占用cpu资源? 四、内核接收网络数据全过程 五、同时监视多个socket的简单方法 六、epoll的设计思路 七、epoll的原理和流程 八、epoll的实现细节 九、结论 一、从网卡接收数据说起   下图是一个典型的计算机结构图,计算机由CPU、存储器(内存)、网络接口等部件组成。了解epoll本质的第一步,要从硬件的角度看计算机怎样接收网络数据。    下图展示了网卡接收数据的过程。在①阶段,网卡收到网线传来的数据;经过②阶段的硬件电路的传输;最终将数据写入到内存中的某个地址上(③阶段)。这个过程涉及到DMA传输、IO通路选择等硬件有关的知识,但我们只需知道:网卡会把接收到的数据写入内存。 二、如何知道接收了数据?   了解epoll本质的第二步,要从CPU的角度来看数据接收。要理解这个问题,要先了解一个概念——中断。   计算机执行程序时

SOCKET的简单介绍

最后都变了- 提交于 2019-11-29 14:28:02
客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构(互联网中处处是C/S架构):B/S架构也是C/S架构的一种,B/S是浏览器/服务器 C/S架构与socket的关系:我们用socket就是为了完成C/S架构的开发 OSI七层协议(*******) 互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层 每层运行常见物理设备 引子: 须知一个完整的计算机系统是由硬件,操作系统,应用软件三者组成,具备了这三个条件,一台计算机系统就可以自己跟自己完了(比如玩个扫雷).如果你要跟别人一起玩,那就需要上网了,什么是互联网? 互联网的核心就是一对协议的组成,协议就是标准,比如全世界人通信的标准是英语 如果把计算机比作人的话,互联网协议就是计算机界的英语,所有的计算机都学会了互联网协议,那所有的计算机就可以按照统一的规则标准去收发消息进行通信了,人们按照分工不同把互联网协议从逻辑上划分成了层级。 详见网络通信原理! 为何学习socket一定要先学习互联网协议呢?   首先C/S架构是基于网络通信的   然后网络的核心就是一堆网络协议,也就是协议标准。如果你想开发一款基于网络通信的软件,就必须遵循这些标准。 socket层 socket是什么? socket是应用层与TCP/IP协议通信的中间软件抽象层,它是一组接口。在设计模式中

Linux网络基础

懵懂的女人 提交于 2019-11-29 14:03:36
**计算机网络:**通过各种不同的通信设备和线材介质将处于不同地理位置且功能独立的多个计算机系统连接起来,然后通过成熟完善的网络软件体系如网络协议(TCP/IP)或网络操作系统实现网络中资源共享和信息传递的系统。 网桥:位于OSI模型的数据链路层,作用是减少集线器因共享和半双工性引发的网络冲突问题网桥的性能比集线器更好,因为网桥能够基于MAC地址进行数据链路层选路,能够基于 学习构造MAC地址表,对MAC地址进行控制与过滤,所以网桥可以基于MAC地址进行选路,比集线器性能更好,将冲突域划分的更小,转发行能比集线器更高。但同样是不能隔离广播,所以不能让网桥形成闭合的环路。 网桥MAC地址自学习:在网桥的接口上记录数据报文的源MAC地址,来完成整个MAC地址表的构建。 OSI开放式七层模型: 1.物理层: 物理媒介,网络线缆,利用一些物理媒体,如双绞线、同轴电缆等,但具体的物理媒体并不在OSI的7层之内,有人把物理媒体当做第0层,物理层的任务就是为它的上一层提供一个物理连接,以及它们的机械、电气、功能和过程特性,物理层的协议产生并检测电压以便发送和接收携带数据的信号。物理层将数字信号转换为比特流进行传输。在你的桌面P C 上插入网络接口卡,你就建立了计算机连网的基础。尽管物理层不提供纠错服务,但它能够设定数据传输速率并监测数据出错率。 (物理设备) 2.数据链路层:

网络通信协议、UDP通信、TCP通信

℡╲_俬逩灬. 提交于 2019-11-29 13:58:28
网络通信协议 网络通信协议有很多种,目前应用最广泛的是 TCP/IP 协议 ,它是一个 包括 TCP 协议 和 IP 协议 , UDP 协议 和其它一些协议的协议组。 IP 地址和端口号 目前, IP 地址 广泛使用的版本是 IPv4 ,它是由 4 个字节大小的二进制数来表示,如: 00001010000000000000000000000001 。 通常会将 IP 地址写成十进制的形式,每个字节用一个十进制数字 (0-255) 表示,数字间用符号“ . ”分开,如 “ 192.168.1.100 ”。 通过 IP 地址可以连接到指定计算机,但如果想访问目标计算机中的某个应用程序,还需要指定 端口号 。 在计算机中,不同的应用程序是通过端口号区分的。端口号是用两个字节( 16 位的二进制数)表示的,它的取值范围是 0~65535,其中,0~1023 之间的端口号用于一些知名的网络服务和应用 , 用户的普通应用程序需要使用 1024 以上的端口号 ,从而避免端口号被另外一个应用或服务所占用。 InetAddress类 代码演示 public class Example01 { public static void main(String[] args) throws Exception { InetAddress local = InetAddress.getLocalHost();

python 网络编程 TCP/IP socket UDP

牧云@^-^@ 提交于 2019-11-29 13:55:57
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多。 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM、Apple和Microsoft都有各自的网络协议,互不兼容,这就好比一群人有的说英语,有的说中文,有的说德语,说同一种语言的人可以交流,不同的语言之间就不行了。 为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议,为了实现互联网这个目标,互联网协议簇(Internet Protocol Suite)就是通用协议标准。Internet是由inter和net两个单词组合起来的,原意就是连接“网络”的网络,有了Internet,任何私有网络,只要支持这个协议,就可以联入互联网。 因为互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,所以,大家把互联网的协议简称TCP/IP协议。 通信的时候,双方必须知道对方的标识,好比发邮件必须知道对方的邮件地址。互联网上每个计算机的唯一标识就是IP地址,类似123.123.123.123。如果一台计算机同时接入到两个或更多的网络,比如路由器,它就会有两个或多个IP地址,所以,IP地址对应的实际上是计算机的网络接口,通常是网卡。 IP协议负责把数据从一台计算机通过网络发送到另一台计算机。数据被分割成一小块一小块,然后通过IP包发送出去

Http和Socket连接区别

╄→尐↘猪︶ㄣ 提交于 2019-11-29 13:54:00
1、TCP连接 要想明白Socket连接,先要明白TCP连接。手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。 建立起一个TCP连接需要经过“三次握手”: 第一次握手:客户端发送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连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开) 2、HTTP连接 HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础

HTTP和Socket

末鹿安然 提交于 2019-11-29 13:53:37
http://popwang.iteye.com/blog/1055576 2011 - 05 - 23 HTTP和Socket Socket 应用服务器 网络协议 网络应用 防火墙 相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助。 1、TCP连接 要想明白Socket连接,先要明白TCP连接。手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。 建立起一个TCP连接需要经过“三次握手”: 第一次握手:客户端发送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, Scoket, HTTP

淺唱寂寞╮ 提交于 2019-11-29 13:53:24
1、TCP连接 要想明白Socket连接,先要明白TCP连接。手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。 建立起一个TCP连接需要经过“三次握手”: 第一次握手:客户端发送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连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开) 2、HTTP连接 HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础

android 网络编程--socket tcp/ip udp http之间的关系

柔情痞子 提交于 2019-11-29 13:53:06
网络七层由下往上分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,一般编程人员接触最多的就是应用层和运输层,再往下的就是所谓的媒体层了,不是我们研究的对象。 下面是应用层、运输层,网络层、链路层通信协议概图。我们经常接触到的一般是: http协议:应用层协议,并且http协议是基于tcp连接的,主要解决的是如何包装协议的 tcp协议:运输层协议,通常也叫做tcp/ip协议,主要解决数据如何在网络中传输 udp协议:运输层协议,用户数据报协议,不可靠的协议,只负责把应用层的协议的数据传送到ip层的数据报,而不管数据是否到达。 ip协议:网络层。 socket连接:长连接 http连接:短连接 下面详细介绍网络通信中的几个概念与原理: (1)Socket(套接字) : 套接字( socket)是通信的基石,是支持 TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的 IP地址,本地进程的协议端口,远地主机的 IP地址,远地进程的协议端口。 应用层通过传输层进行数据通信时, TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个 TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与 TCP/

TCP/IP

﹥>﹥吖頭↗ 提交于 2019-11-29 12:31:50
1、TCP/IP模型 TCP/IP协议通信的过程其实就是数据入栈出栈的过程。入栈就是数据发送方每层不断的封装首部和尾部,添加一些传输的信息,保证能传输到目的地、出站就是数据接收方每层不断的拆除首部和尾部,得到最终的传输数据。 下图是以http协议来说明: 二、数据链路层 物理层负责的是0、1比特流与物理设备电压高低、光的闪灭之间的互换。 数据链路层负责的就是将这些0、1序列划分为数据帧,然后从一个节点(主机)传输到另一个节点(主机)。这些节点是通过MAC来唯一标识的(MAC,物理地址,一个主机有一个MAC地址)。 封装成帧:把网络层数据报加头和尾,封装成帧,帧头包括了源MAC地址和目的MAC地址; 透明传输:0比特填充、转义字符; 可靠传输:在出错率很低的链路上很少用(因为一根线连着彼此,当然不会出错),在 无线链路WLAN 会保证可靠传输; 差错检测(CRC):接受者检测错误,如果发现错误,就丢弃该帧; 三、网络层 1、IP协议 IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGMP的数据 都以IP数据格式 传输。 要注意的是, IP不是可靠的协议 ,这是说,IP协议 没有提供一种数据未传达以后的处理机制 ,这被认为 是上层协议:TCP或UDP要做的事情 。 1.1 IP地址 数据链路层中通过MAC地址来识别两个不同的节点,在IP层(网络层)通过IP地址来识别