网络编程之“一切皆socket”

1:内网访问:通过内网IP直接访问,例:ping

ip号


   外网访问:通过域名(ip号)+端口号访问例:http://www.bilibili.com--这就是域名

   补充:TCP在第一次寻路成功之后就会建立一条传输通道,虽然该通道不是实际存在的,但是以后的数据传输默认了一条传输通道,以太网帧格式在ip数据报前加了源地址与目的地址,该地址指的是mac地址实则就是每台电脑的网卡地址,ip地址(32位)在网络环境中唯一标识一台主机,mac地址应该是在硬件中唯一标识一台主机。192.168.0.0是局域网Ip范围。

NAT映射与打洞机制??


在通信通道还没建立之初,接受的目的mac地址能得到吗?不能,所以需要通过arp请求获得下一跳的MAC地址(16位)





  2:网络字节序的转换

     大端存储:低地址存高位(网络数据流使用的大端字节序)

     小端存储:低地址存地位(计算机是小端字节序)

   字节序的转换函数:



3:ip地址转换函数


[if !supportLists]a.      [endif]点分十进制字符串转网络参数函数:int inet_pton(int af,const char *arc,void *dst),其中af—ip地址族协议,分别是AF_INET(ipv4)or AF_INET6(ipv6);

Src—传原地址,即点分十进制的字符串

Dst—传出参数,直接被分装成void *的类型

[if !supportLists]b.      [endif]网络字节序转点分十进制字符串函数:const char *inet_ntop(int af,const void *src,char *dst,socklen_t  size)

Src—网络字节序

Dst—字符串指针的位置

Size—字符串存储的空间大小

4:socksddr数据结构



[if !supportLists]a.      [endif]需要强制性转参类型的函数

[if !supportLists]b.      [endif]Struct sockaddr_in结构体的内容:


Sin_port—传端口号(字节序转换)

Sin_addr—传ip地址(字节序转换)


5:网络编程=socket编程:二进制+IP+端口通讯的一种模式


[if !supportLists]a.      [endif]在不同主机之间的通信现采用的均是socket接口,在该接口下提供了很多供应用层使用的接口函数,该接口是传输层提供给应用层调用本层方法的类似于函数的接口。不同的主机进程之间通信,由ip地址(网络层)确定唯一主机的位置,再由进程的端口号(传输层)确认进程的位置。

[if !supportLists]b.      [endif]Socket必须成对出现,一个在发送端,一个在接受端;socket在使用时必须绑定ip和端口号;在socket在Linux的内核实现比较复杂,,一个文件描述符指向两个文件缓冲区

[if !supportLists]c.      [endif]

在网络环境中唯一标识的进程就是一个socket,在使用socket时c语言的头文件必须包含:

#Include

#include

<sys/socket.h>

[if !supportLists]d.      [endif]socket的使用:

int socket(int domain, int type, int protocol);

domain:即协议域,又称为协议族(family)。常用的协议族有,AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域socket)、AF_ROUTE等等。协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。

type:指定socket类型。常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等(socket的类型有哪些?)。

SOCK_STREAM—流式套接字,用到的传输层协议是TCP

SOCK_DGRAM—数据包套接字,用到的传输层协议是UDP

SOCK_RAW—原始套接字

protocol:故名思意,就是指定协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议(这个协议我将会单独开篇讨论!)。

注意:并不是上面的type和protocol可以随意组合的,如SOCK_STREAM不可以跟IPPROTO_UDP组合。当protocol为0时,会自动选择type类型对应的默认协议。

补充:在socket()函数创建成功之后,函数会返回一个socket的文件描述符,失败返回-1

6.

到底这里面的

套接字socket是跟接受端的ip、端口号绑定还是跟发送端的端口号绑定?自己理解应该是绑定自己的ip与端口号

7. 

8. 服务器调用与客户端建立连接的函数

9. 客户端调用的建立连接的函数

 Conststruct sockaddr *addr—里面放的是服务器的ip与端口号


10.C/S模型的流程图





[endif]

Socket()

[if !mso]

[endif] 

任何一个socket都需要与ip和端口号绑定才能通信,但是在客户端,没有调用bind()函数操作系统可以自动绑定一个ip与端口号,但是服务器不能自动绑定,因为自动绑定时我们在客户端申请建立连接调用connect()函数时无法得只服务器的ip与端口号,所以服务器的ip与端口号需要自己设置绑定。

11:服务器代码实例

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358

推荐阅读更多精彩内容

  • 网络编程 一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运...
    go以恒阅读 2,022评论 0 6
  • Linux系统的一大特点是它的网络编程能力十分强大, 学习它, 让我们真正体会网络的魅力! 一. 客户机/服务器模...
    刘元旺阅读 6,537评论 0 5
  • Socket创建函数 socket.socket(socket_family, socket_type, prot...
    JianMing阅读 6,014评论 1 13
  • Socket基础概念 网络中进程之间如何通信? 网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则...
    DiamondsAndRust阅读 4,756评论 2 54
  • 杨慧霞 洛阳 焦点讲师班二期 坚持分享第1056天 单位任务越来越重,压力也越来越大。常常想好了干什么,结...
    yhx慧心慧语阅读 77评论 0 0