UNIX标准C - socket套接字
一、计算机网络
1.计算机网络的功能
a.数据通信
b.资源共享
c.提高系统的可靠性
d.分布式网络处理和负载均匀。
2.计算机网络的组成
1.通信子网:由网卡、线缆、集线器、中继器、交换器、路由器等。
2.资源子网:网络中的计算机、打印机等一些可以提供服务的一些设备。
3.计算机网络软件:
协议软件:它规定了计算机之间通信的准则,TCP/IP协议簇
网络通信软件:网络中实现计算机与设备之间通信的软件
网络操作系统:可以提供网络服务的计算机操作服务
windows server2008 UNIX Linux
网络管理软件和网络应用软件:
防火墙、SElinux
浏览器、迅雷、ftp客户端
3.计算机网络的分类
1.按网络的作用范围划分
局域网 城域网 广域网
2.按网络的传播技术来划分
广播式网络
点到点网络
3.传输介质来划分
有线网、无线网、微波通信、卫星通信
4.计算机网络的拓朴结构
1.星型拓扑结构
2.树型拓扑结构
3.总线型拓扑结构
4.环形拓扑结构
5.网状型拓扑结构
5.计算机网络的发展过程
1.以计算机为中心的联机系统
2.分组交换网络的诞生
3.网络体系结构与协议标准化。
20世纪80年代 ISO组织提出 开放式系统互联参考模型OSI,
由于这个模型照顾到了各方的利益所以太过盘大,所以至今没有推出成熟的产品,
TCP/IP协议一套符合OSI标准的协议。
异构:操作系统(windows) ->socket ->TCP/IP ->TCP/IP ->socket ->Linux
4.高速计算机网络
6.网卡:网络借口卡或网络适配器、它负责将数据发送网络中心去,也负责从网络中获取数据,每个网卡上会有一个独一无二MAC地址
7.OSI模型与TCP/IP模型
OSI/RM结构七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP模型四层:
物理层、 物理层
物理层 数据链路层
网络层、 网络层
传输层、 传输层
应用层。 会话层、表示层、应用层
物理层:负责通信网络收发数据包
网络层:选择、流量控制、与网络拥塞问题,IP协议是该层核心
传输层:机器之间建立用于会话的端到端链接(用于数据的传输),该层的核心协议是TCP、UDP协议。
应用层:主要为用户提供针对性的服务,该层代表的协议:HTTP、SMTO、FTP、TELNET
8.ipv4地址
在计算机网络中的每一台计算机都必须有一个唯一的标识符它就是ip地址。目前由4个不超过255的整数组成,
一般用点分十进制
ip地址的分类:
A类:第一二进制位必须是0,
1.0.0.0
127.255.255.255
B类:前两位的二进制必须是10
128.0.0.0
191.255.255.255
C类:前三位的二进制必须是110
192.0.0.0
223.255.255.255
D类:前四位的二进制必须是1110
224.0.0.0
239.255.255.255
E类:前四位的二进制必须是1111
240.0.0.0
255.255.255.255
9.公网ip和私有ip
共有ip:在网络服务提供商登记过的ip地址叫公有ip。
私有ip:由一家公司或组织自己分配,不能在网络直接访问的ip
10.子网掩码 :目前由不超过255的整数的组成,一般用点分十进制表示(255.255.255.0)
子网掩码&ip地址 = 网络地址
如果两个人ip地址的网络地址相同,那么说明她们在同一个子网内,就可以直接通信而不需要路由。
11.网关地址:负责子网络出口的计算机,一般由路由器提供(路由器就是一台具有路由功能的计算机
12.端口号:操作系统为需要通信的进程分配一个独一无二的编号,端口号可以确定与那个进程来通信。
1~1024基本上已经被操作系统占用,一般编程要使用1024上的
http:80
htp:21
telnet:23
二、套接字(socket:插座)
是一种可以进行网络通信的内核对象,它是一个唯一的标示符,一般称它为socket描述符,跟文件描述符类似,
也可以用read/write/close操作
int socket(int domain,int type,int protocol)
功能:创建socket对象
domain:通信地址类型
AF_UNIX/AF_LOCAL:本地进程通信
AF_INET:使用ipv4地址通信
AF_INET6:使用ipv6通信
type:
SOCK_STREAM:数据流协议,TCP面向连接的通信协议
优点:安全可靠,数据不丢失,但速度慢
一般常用于安全性较高的场所。
SOCK_DGRAM:数据报协议,UDP面向无连接的通信协议
优点:速度快,数据可能丢失,安全性和可靠性与tcp相比不同
一般用于安全性要求不高,但是对速度有要求的场所。
protocol:特殊协议,一般不用,一般为0;
准备通信地址:
基本的通信地址
struct socketaddr
{
socketaddr;
}
本地通信地址
struct sockaddr_un
{
//通信地址类型
sun_family_t sum_family;
//socket文件的路径
char sun_path[108];
}
网络通信地址
struct socketaddr_in
{
//通信地址类型
short int sin_family;
//端口号
int_port_t sin_port;
//ip地址
struct in_addr sin_addr;
}
三、本地socket进程间通信
A(B的地址+消息内容) -> B
B(A的地址+消息内容) -> A
进程A:创建socket->准备地址->绑定->连接->接受/发送->关闭socket->删除socket
进程B: 创建socket->准备地址->绑定->连接->接受/发送->关闭socket
进程B可以给进程A发送消息
一个socket对象只能绑定一个地址。
int bind(int sockfd,const struct sockaddr* addr,socklen_t addrlen);
功能:把socket对象与通信地址建立联系
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:连接上通信目标
addr:目标地址
四、网络通信(UDP)
点到点
网络通信地址
struct socketaddr_in
{
//通信地址类型
short int sin_family;
//端口号
int_port_t sin_port;
//ip地址
struct in_addr sin_addr;
}
个人计算机数据的存储方式可能是大端,也可能是小端
网络通信时需要的是大端数据,必须把数据转换成大端
生成端口号:
uint32_t htonl(uint32_t hostlong);
功能:把32位主机字节序转换成32位网络字节序
uint16_t htons(uint16_t hostshort);
功能:把16位的主机字节序转换成16为的网络字节序
uint32_t ntohl(uint32_t netlong);
功能:把32位网络字节序转换成32位主机字节序
uint16_t ntohs(uint16_t netshort);
功能:把16位的网络字节序转换成16为的主机字节序
生成端口号:
端口号就是一个16位的无符号整数:
生成ip地址:
功能:把点分十进制的字符串ip地址转换成32位的无符号整数
char* inet_ntoa(struct in_addr in)
功能:把32位网络字节序的ip地址转换成点分十进制的字符串ip地址。
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
功能:接受数据并获取发送端的地址
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
功能:发送数据到指定的目标
进程A:创建socket对象->准备地址->绑定->接受数据和来时的地址->原路返回数据->关闭socket
进程B:创建socket对象->准备地址->连接->向目标发送数据->接受数据->关闭socket
当socket对象被全部关闭,会在内核中停留一段时间(会给重新连接的机会),如果再使用同样的ip地址和端口时就会失败(延时关闭)

五、网络通信(TCP)
一对多
面向连接的网络通信,在通信过程中时刻保持连接,这种通信方式类似于打电话,能保证安全可靠、数据不丢失
,但与UDP相比,它的传输速度略低
进程A:创建socket->准备地址->绑定->监听(设置队列长度)->等待接通->通信->关闭
进程B:创建socket->准备地址->连接->通信->关闭。
int listen(int sockfd,int backlog);
功能:设置socket对象最大排队数量
int accept(int sockfd,struct sockaddr * addr,socklen_t * addrlen)
功能:等待其他主机与当前socket建立连接关系
返回值:建立连接的描述符
ssize_t recv(int sockfd,const void* buf,size_t len,int flags);
功能:网络通信专用发送接受
ssize_t send(int sockfd,const void* buf,size_t len,int flags);
当recv/send 返回值为-1时说明连接断开,此时应该结束循环
功能:网络通信专用的数据发送
什么是三次握手:
什么是可靠的连接:(A要知道A->B&&B->A)
(B要知道B->A&&A->B)
UNIX标准C - socket套接字的更多相关文章
- 网络编程初识和socket套接字
网络的产生 不同机器上的程序要通信,才产生了网络:凡是涉及到倆个程序之间通讯的都需要用到网络 软件开发架构 软件开发架构的类型:应用类.web类 应用类:qq.微信.网盘.优酷这一类是属于需要安装的桌 ...
- 进程间通信系列 之 socket套接字实例
进程间通信系列 之 概述与对比 http://blog.csdn.net/younger_china/article/details/15808685 进程间通信系列 之 共享内存及其实例 ...
- 进程间通信系列 之 socket套接字及其实例
进程间通信系列 之 概述与对比 http://blog.csdn.net/younger_china/article/details/15808685 进程间通信系列 之 共享内存及其实例 ...
- UNIX网络编程——原始套接字(dos攻击)
原始套接字(SOCK_RAW).应用原始套接字,我们可以编写出由TCP和UDP套接字不能够实现的功能. 注意原始套接字只能够由有 root权限的人创建. 可以参考前面的博客<<UNIX网络 ...
- UNIX网络编程——原始套接字的魔力【续】
如何从链路层直接发送数据帧 上一篇里面提到的是从链路层"收发"数据,该篇是从链路层发送数据帧. 上一节我们主要研究了如何从链路层直接接收数据帧,可以通过bind函数来将原始套接字绑 ...
- Python Web学习笔记之socket套接字
套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并进行连接,如发送和接受数据.为了建立通信通道,网络通信 ...
- Socket(套接字) IP TCP UDP HTTP
Socket(套接字) 阮老师的微博 (转)什么是套接字(Socket)? 应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进 ...
- PHP Socket(套接字连接)扩展简介和使用方法
PHP socket扩展是基于流行的BSD sockets,实现了和socket通讯功能的底层接口,它可以和客户端一样当做一个socket服务器. 使用这些函数时请注意,虽然他们中有很多和C函数同名的 ...
- Python开发基础-Day23try异常处理、socket套接字基础1
异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解 ...
随机推荐
- 解决js跨域使用nginx配置问题
在server域中加入以下配置: #解决跨域问题 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-C ...
- [Python3] 026 常用模块 calendar
目录 calendar 1. calendar.calendar(year, w, l, c, m) 2. calendar.prcal(year, w, l, c, m) 3. calendar.m ...
- spring boot-15.缓存
为了减轻数据库压力和提高访问速度,从spring3.1开始映入了基于注解的缓存机制. 1.Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, ...
- MySQL -2- 体系结构
1. 体系结构 1.1 C/S(客户端/服务端)模型介绍 image TCP/IP方式(远程.本地): mysql -uroot -poldboy123 -h 10.0.0.51 -P3306 S ...
- rk3288 编译应用程序
一. Android.mk 1.1. 什么是.mk Android.mk是Android提供的一个makefile文件,可以将源文件分组为模块.用来引用的头文件目录.需要编译的*.c/*.cpp文件. ...
- 数位dp(不要62)
http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求区间内满足以下条件的数量 1.数位不能出现4,2.任意两相邻数位不能是62. 解法:数位dp[po ...
- P4962 朋也与光玉题解
题目链接 光坂小镇是一个由 n 个点(编号为 1 ~ n),m 条有向边构成的图,每个节点上都有一个光玉,光玉共有 k 种,编号为 0 ~ k−1. 为了使一切改变,朋也需要找齐全部的 k种光玉.他可 ...
- 剑指offer-二进制中1的个数-进制转化-补码反码原码-python
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. ''' 首先判断n是不是负数,当n为负数的时候,直接用后面的while循环会导致死循环,因为负数 向左移位的话最高位补1 ...
- ES使用text类型字段排序报错
elasticsearch text字段排序报错解决使用elasticsearch 进行排序的时候,我们一般都会排序数字.日期.但是在排序text类型的时候就会出现错误. GET xytest/sut ...
- CTP报单参数详解
交易所代码 产品类型 业务类型 价格类型 指令类型 价格类型 OrderPriceType 有效期类型 TimeCondition 成交量类型 VolumeCondition 备注 CZCE 郑商所 ...