csapp网络编程初学笔记
csapp网络编程初学笔记
客户端-服务器编程模型
每个网络应用都是基于客户端-服务器模型,服务器管理某种资源,并且通过操作来为它的客户提供某种服务
客户端-服务器模型中的基本操作是transaction,由以下四步组成:
1.当一个客户端需要服务时,它向服务器发送一个请求。
2.服务器接收到请求后,解释它,并以适当的方式操作它的资源。
3.服务器给客户端发送一个响应,并等待下一个请求。
4.客户端接收响应并处理响应。
网络
客户端和服务器通常运行在不同的主机上,并借通过计算机网络的硬件和软件资源来通信。网络是个复杂的系统。
从程序员的角度来看的一个可工作的思考模型:
对于一个主机而言,网络只是又一种I/O设备,作为数据源和数据接收方。
网络物理层次:
1.以太网段(Ethernet segment):由电缆,集线器,不同主机构成。
2.桥接以太网(bridged Ethernet):较大的局域网,由多个以太网段和网桥构成。
3.互联网络(internet):由多个局域网和路由器构成。
协议
协议是运行在每台主机和路由器上的一种软件,这种软件实现了一种协议,这种协议控制主机和路由器如何协同工作来实现数据传输。互联网至关重要的特性是,它能由采用完全不同的和不兼容技术的各种局域网和广域网组成,所以才需要协议来实现某台源主机跨过所有这些不兼容的网络发送数据到另一台目的主机。为此这种协议必须提供两种基本能力:
1.命名机制.不同的局域网技术有不同的和不兼容的方式来为主机分配地址。互联网协议通过命名一种一致的主机格式来消除这些差异。每台主机会被分配至少一个这种互联网络地址,这个地址唯一标识这台主机。
2.传送机制.在电缆上编码位和将这些位封装为帧方面,不同的网络技术有不同和不兼容的方式.互联网协议通
过定义一种把数据位困扎成不连续的包的统一方式,从而消除了这些差异.
全球IP因特网
每台因特网主机都实现运行TCP/IP协议的软件,因特网的客户端和服务器端混合使用套接字接口函数和UNIX I/O函数来进行通信
从程序员角度,可以把因特网看作是一个世界范围的主机集合,满足以下特性:
1.主机集合被映射位一组32位的IP地址.
2.这组IP地址被映射为一组称为因特网域名的标识符
3.因特网主机上的进程能够通过连接和其他因特网主机上的进程通信.
IP地址
一个IP地址就是一个无符号32位整数.网络程序将IP地址存放在如下IP地址结构中
/*Internet address structure*/
struct in_addr{
unsigned int s_addr;//network byte order(big-endian)
};
因特网域名
因特网客户端和服务器互相通信使用的是IP地址,然而对于人们而言,大整数是很难记住的,所以因特网也定义了一组更加人性化的域名,以及将域名映射到IP地址的机制.这个映射就是通过分布世界范围内的数据库(DNS)来维护的.所以每条主机条目就是一个域名和IP地址的等价类.
/*DNS host entry structure*/
struct hostent{
char *h_name; //official domain name of host
char **h_aliases; //null-terminated array of domain names
int h_addrtype; //host address type
int h_length; //length of an address in bytes
char **h_addr_list; //null-terminated array of in_addr structs
};
因特网程序通过调用gethostbyname和gethostbyaddr函数,从DNS数据库中检索任意主机条目.
#include<netdb.h>
struct hostent *gethostbyname(const char *name);
/*返回:若成功则为非NULL指针,若出错则为NULL指针,同时设置h_erron*/
struct hostent *gethostbyaddr(const char *addr,int len,0);
/*返回:若成功则为非NULL指针,若出错则为NULL指针,同时设置h_erron*/
因特网连接
因特网客户端和服务器通过在连接上发送和接收字节流来通信.从连接一对进程的意义来讲,连接是点对点的,从数据可以同时双向流动来讲,他是全双工的.
一个套接字就是连接的一个端点,每个套接字都有相应的套接字地址,是由一个英特网地址和一个16位整数端口组成.用"地址:端口"来表示,当客户端发起一个连接请求时,客户端套接字地址中的端口是由内核自动分配,称为临时端口,然而服务器套接字端口通常是某个知名的端口,如web服务器通常是80端口.
一个连接是由它两端的套接字地址唯一确定的,这对套接字地址叫做套接字对,由下列元组来表示:
(cliaddr:cliport,servaddr:servport)
csapp网络编程初学笔记的更多相关文章
- 转 网络编程学习笔记一:Socket编程
题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...
- CSAPP 并发编程读书笔记
CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...
- UNIX网络编程--读书笔记
会集中这段时间写UNIX网络编程这本书的读书笔记,准备读三本,这一系类的文章会不断更新,一直会持续一个月多,每篇的前半部分是书中讲述的内容,每篇文章的后半部分是自己的心得体会,文章中的红色内容是很重要 ...
- Java Socket网络编程学习笔记(一)
0.前言 其实大概半年前就已经看过网络编程Socket的知识了(传统IO),但是因为长时间的不使用导致忘的一干二净,最近正好准备校招,又重新看了网络编程这一章, 是传统IO(BIO)相关的内容,故在此 ...
- TCP/IP网络编程 读书笔记1
本篇主干内容是TCP/IP网络编程1-9章学习笔记 1. linux文件描述符 描述符从3开始以由小到大的顺序编号,0,1,2,分配给标准I/O用作标准输入.标准输出和标准错误. 2. 协议族与套接字 ...
- JAVA UDP网络编程学习笔记
一.UDP网络编程概述 采用TCP协议通信时,客户端的Socket必须先与服务器建立连接,连接建立成功后,服务器端也会持有客户端连接的Socket,客户端的Socket与服务器端的Socket是对应的 ...
- JAVA TCP网络编程学习笔记
一.JAVA网络编程概述 网络应用程序,就是在已实现网络互联的不同计算机上运行的应用程序,这些程序之间可以相互交换数据.JAVA是优秀的网络编程语言,Java网络编程的类库位于java.net包中.J ...
- Linux C网络编程学习笔记
Linux C网络编程总结报告 一.Linux C 网络编程知识介绍: 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端:(client) 在网络程序中, ...
- 网络编程学习笔记(二)基于TCP的Socket编程
1.Socket:英文意思插座.两个Java应用程序可以通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket. 2.Socket通常用来实现client-server(客户端 ...
随机推荐
- Tomcat启动时一闪而过,看不多错误信息解决方案
转自:https://wangxh89.iteye.com/blog/1824806 有时Tomcat的启动窗口一闪而过,根本就看不出启动过程中发生了什么错误.这中间的原因有好多种,最常见的解决办法就 ...
- robot framework笔记(二):在RF中自定义chrome启动参数
(一)在RF中自定义chrome启动参数 这里主要是实现下面2个功能 1.禁用chrome正受自动测试软件控制的提示 2.设置默认的下载路径(一些导出.下载类的功能,将文件下载到指定路径下) 自定义一 ...
- Android笔记(四十六) Android中的数据存储——XML(二)PULL解析
PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText()从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDo ...
- ab接口压力测试工具使用
ab的使用 模拟并发请求100次,总共请求10000次 命令模板: ab -c 100 -n 10000 待测试网站(建议完整路径) 内容解释: Server Software: nginx/1.10 ...
- Django分表操作、聚合及FQ方法
聚合 aggregate(*args, **kwargs) # 计算所有图书的平均价格 from django.db.models import Avg Book.objects.all().aggr ...
- 配置jdk和环境变量
1.官网下载jdk1.8,默认安装即可 2.JAVE_HOME:jdk安装目录 path:C:;%JAVA_HOME%\bin; C:;%JAVA_HONE%\jre\bin;(当dos界面输入命令 ...
- 通过 ffmpeg 获取视频第一帧(指定时间)图片
最近做一个上传教学视频的方法,上传视频的同时需要上传视频缩略图,为了避免用户上传的缩略图与视频内容不符,经理要求直接从上传的视频中截图视频的某一帧作为缩略图,并给我推荐了FFMPEG.FFMPEG 功 ...
- Greenplum Segment 的检测机制
Greenplum集群具有较好的容错性和高可用性,其中一点就体现在segment镜像机制上.接下来本文会简单地阐述segment的作用以及segment镜像机制是如何保证GP高可用的. Segment ...
- (尚003).Vue_模板语法
1.双大括号表达式 2.指令一:强制数据绑定 3.指令二;绑定事件监听 test003.html<!DOCTYPE html><html lang="en"> ...
- asp.net之大文件断点续传
ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...