网络连接相关基础知识笔记

一.常说的TCP/IP的含义

TCP/IP协议簇并不仅仅指TCP协议和IP协议,实际它包括了一系列协议组成的集合,如:TCP,IP,UDP,FTP,SMTP,DNS,ARP,PPP等

TCP与UDP协议都属于传输层协议,但有很大不同,TCP是面向连接的协议,提供的是可靠的数据流服务,TCP采用"带重传的肯定确认"机制来实现传输的可靠性,实现了一种"虚电路",因为从物理上来说,并不是真正在两台主机间建立了连接,这种连接只是存在于逻辑上的。最大的开销出现在通信前建立连接和事后释放连接。

而UDP提供的是不可靠的或者说无连接的通信。对应的,UDP协议的开销比TCP的开销要小。

1.TCP协议属于传输层协议,三次握手建立连接,四次握手释放连接。

2.HTTP协议是应用层协议,基于TCP协议,通信始终采用的是客户端请求,服务器响应的模型。

二.理解socket编程

socket是一个编程接口,最初用于进程间通信,后来扩展至支持Unix中的TCP/IP通信。在Unix中everything is a
file,所以通过socket()函数返回的socket句柄就是一个文件描述符。

socket对象可以理解为通信端点的抽象表示,包括五部分内容:使用的通信协议(可以是TCP,也可是UDP),本地主机IP,本地端口,远程主机IP,远程主机端口。

服务器一直处于监听状态,客户端发送消息,服务器创建一个线程来服务此用户(即服务这个socket,将此次获得的这个socket作为参数传入线程,线程可以从socket取出数据,操作等等...),与此同时监听线程继续监听端口。

具体编程:

C语言:

1.建立一个socket

int
socket(int family, int type, int
protocol);  //family是地址族,type是流式/数据报/原生,protocol一般设为0

这一步实际意味着为一个Socket数据结构分配内存空间

2.配置socket,即设置本地/远程主机地址和端口

无论哪种类型的socket,服务器端都用 int bind(int sockfd,struct sockaddr
*my_addr, int addrlen) 函数配置

无连接客户端也用bind函数配置,对于有连接socket的配置和建立连接两个功能的用一个connect()函数实现

3.int
connect(int sockfd, struct sockaddr *serv_addr,int addrlen);

只有面向连接的客户端才需要调用这个函数,配置socket并发起同服务端的连接。

4.服务端不主动发起连接,在socket配置好以后,只需调用 int listen(int sockfd, int
backlog)函数监听端口,等待客户端的请求。

listen方法让socket处于被动的监听模式,并为该socket建立一个输入数据队列,将到来的请求保存在该队列中。backlog参数指定等待队列中允许保存的最大请求数。大多数系统缺省值为20。如果一个服务请求到来时,该输入队列已满,该socket将拒绝连接请求,客户端将收到错误信息。

5.int
accept(int sockfd, void *addr, int
*addrlen)  在监听开启以后,服务端调用这个方法返回一个socket,返回的这个socket与发起请求的特定主机信息联系起来。而原来的ServerSocket则继续监听。

三.小结:

Socket是网络编程这块中最基础的东西,它将网络IO的复杂性进行了封装,通过调用Socket接口,我们可以在网络中传输数据。平常提到Socket,我们想到相关的就是服务器,客户端,连接,TCP,UDP,字节流这些东西。

虽然现在客户端与服务器可以通过Socket互相发送任意字符或字节,但是如果我们要看见更丰富更标准的东西,比如html网页,图片,视频,简而言之,就是超越文本的资源(引出了HTTP协议),又该如何,当然我们可以自己按标准来组织,解析字节流中的数据,但是自己的实现方式可能不是最优的,甚至出错,所以还是需要标准,需要协议,这些东西就是为了规范通用,提升效率而设计的,当然要使用!

首先看HTTP协议,超文本传输协议规定了浏览器与服务器怎样传输文档,有了它,我们就不会随心所欲的编写通信字符串了。客户端向服务器发送的文档,服务器按照HTTP协议来读,一下就能读懂,反过来也是。

http基本的模型就是请求——响应模型,接下来就需要服务器具备可以解析这份遵守HTTP协议文档的能力,这实现起来自然不难,所以Web容器(如tomcat)支持http,以java为例,实际就是Servlet中httpservelt的实现,具体步骤就是,服务器从socket的输出流中根据http协议解析出请求信息,服务器创建httpservletrequest对象和httpservletresponse,将解析出的请求信息封装在这个请求对象里——进入servlet容器处理部分,程序员从httpservletrequest中取得信息操作,最后程序员将响应信息放到httpservletresponse里——服务器提取httpservletresponse中的信息,根据Http协议翻译成字节或者字符,写入socket的输入流,接下来就是socket负责的通信传输的事了。

可以这样理解协议,协议就是一系列带有标准格式的字符串。

从Web容器中可以独立给程序员的模型接口就是Servlet,Servlet可以看作是Web容器运行的一部分逻辑,request与response归根结底对应的是Socket中的字节输出流和字节输入流。所以,Web容器的核心是Socket,

网络连接相关基础知识笔记,布布扣,bubuko.com

时间: 2024-10-01 19:55:11

网络连接相关基础知识笔记的相关文章

【RAC】RAC相关基础知识

[RAC]RAC相关基础知识 1.CRS简介    从Oracle 10G开始,oracle引进一套完整的集群管理解决方案—-Cluster-Ready Services,它包括集群连通性.消息和锁.负载管理等框架.从而使得RAC可以脱离第三方集群件,当然,CRS与第三方集群件可以共同使用. (1).CRS进程 CRS主要由三部分组成,三部分都作为守护进程出现 <1>CRSD:资源可用性维护的主要引擎.它用来执行高可用性恢复及管理操作,诸如维护OCR及管理应用资源,它保存着集群的信息状态和OC

原生ajax基础知识笔记

原生ajax基础知识笔记 1.创建 XMLHttpRequest 对象 所有现代浏览器(IE7+.Firefox.Chrome.Safari 以及 Opera)均内建 XMLHttpRequest 对象. 老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveXObject. 代码示例: // Creates a XMLHttpRequest object. var xhr = new XMLHttpRequest(); 兼容浏览器代码示例: var xhr; /

图像增强相关基础知识

图像增强处理-1 图像增强是图像处理中一个重要的内容,在图像生成,传输或变换的过程中,由于多种因素的影响,造成图像质量下降,图像模糊,特征淹没,给分析和识别带来困难.因此,按特定的需要将图像中感兴趣的特征友选择地突出,衰减不需要的特征,提高图像的可懂度是图像增强的主要内容.图像增强不考虑图像降质的原因,而且改善后的图像也不一定逼近原图像,这是它与图像复原本质的区别.图像增强的主要目的有两个:一是改善图像的视觉效果,提高图像的清晰度:二是将图像转换成一种更适合人类或机器进行分析处理的形式,一边从图

iOS蓝牙开发(一)蓝牙相关基础知识

原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0设备因为低耗电,所以也叫做BLE peripheral,central == 外设和中心,发起连接的时central,被连接的设备为peri

深入理解mysql之BDB系列(1)---BDB相关基础知识

    深入理解mysql之BDB系列(1) ---BDB相关基础知识 作者:杨万富 一:BDB体系结构 1.1.BDB体系结构 BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1中相关数).1)数据存取子系统,2)事务子系统,3)锁子系统,4)内存池管理子系统,5)日志子系统. 在一个应用程序中,并不一定须要全然具备这5大子系统. 假设程序仅仅使用了数据存取子系统,它的体系结构如图1.2.在图1.2中,我们仅仅使了两个子系统:数据存取以及内存池子系统.(备注:另外三个子系统在B

Oracle基础知识笔记(10) 约束

大清早打开vs2008,出现这么诡异的错, 删了一个dll的就好了.如图 Oracle基础知识笔记(10) 约束

Oracle基础知识笔记(11) 建表、更新、查询综合练习

有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系号department) 项目item(项目编号itemid,项目名称itemname,项目比赛地点location) 成绩grade(运动员编号id,项目编号itemid,积分mark) 请用SQL语句完成如下功能: 1.  建表,并在相应字段上增加约束: 定义各个表的主键和外键约束: 运动员的姓名和所属系别不能为空: 积分要第为空值,要么为6,4

iOS蓝牙开发(一)蓝牙相关基础知识(转)

转载自:http://www.cocoachina.com/ios/20150915/13454.html 原文作者:刘彦玮 蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0设备因为低耗电,所以也叫做BLE peripheral,central == 外设和中心,发起连接的时central,被连接的设备为perilheral service an

【嵌入式Linux+ARM】硬件相关基础知识(门电路_UART_I2C_SPI)

比较基本的一些知识,就算再怎么水,一些基本的电路常识还是需要懂的,需要自己慢慢的积累,实际工作中需要好好积累硬件相关的知识: 正文开始: 1.门电路 与门.或门.非门的几个标志需要记住,特别是后面两个不要混淆,自己画了一遍: 实际电路中可以组合使用:如与非门.或非门等复杂电路. 这些是比较简单的,做个简单的复习: 与门:1 1-->1      1 0-->0      0 1-->0     0 0-->0 或门:1 1-->1      1 0-->1      0