티스토리 뷰
1 | int socket(int domain, int type, int protocol); | cs |
1 2 3 4 5 | SOCKET WSAAPI socket( _In_ int af, _In_ int type, _In_ int protocol ); | cs |
domain : 생성할 소켓이 통신을 학 위해 사용할 프로토콜 체계 설정.
프로토콜 체계 |
정의 |
PF_INET |
IPv4 인터넷 프로토콜 |
PF_INET6 |
IPv6 인터넷 프로토콜 |
PF_LOCAL |
Local통신을 위한 UNIX 프로토콜 |
PF_PACKET |
Low level socket을 위한 인터페이스 |
PF_IPX |
IPX 노벨 프로토콜 |
type : 소켓이 데이터를 전송하는데 있어서 사용하게 되는 전송 타입을 설정.
SOCK_STREAM : 전송라인 선점하여 통신. ==> Circuit Switching
TCP
에러나 데이터의 손실 없이 무사히 전달.
전송하는 순서대로 데이터가 전달.
전송되는 데이터의 경계가 존재하지 않음.
두 번의 write(send)함수 호출을 통해서 데이터를 전송했다 하더라고, 수신측 호스트의 버퍼가 넉넉하다면 한번의 read(recv)함수 호출을 통해서 모든 데이터를 수신할 수 있다.
SOCK_DGRAM : 비연결 지향형. ==> Packet Switching
UDP
전송되는 순서에 상관없이 가장 빠른 전송을 지향한다.
데이터를 일단 보낸 후, 매순간 마다 라우터를 정해서 길이 막힌지 안막힌지 판단후 최적의 라인으로 데이터 전송.
전송되는 데이터는 손실될 수도 있고 에러가 발생할 수도 있다.
전송되는 데이터의 경계가 존재한다.
데이터를 전송하는 호스트가 세 번의 함수 호출을 통해서 데이터를 전송했다면, 수신하는 호스트도 반드시 세 번의 함수 호출을 거쳐야 데이터를 완전히 수신할 수 있음.
한번에 전송되는 데이터의 크기는 제한된다.
protocol : 두 호스트간에 통신을 하는데 있어서 특정 프로토콜을 지정하기 위해 사용.
프로토콜을 좀 더 구체화하기 위해서 사용된다.(ex.전송 타입은 같지만 그 안에서도 프로토콜이 또 다시 나뉘는 상황)
RAW_SOCKET을 생성하는 경우에는 유용하게 사용되지만, 그렇지 않은 경우에는 그냥 0을 넣으면 된다.
case |
domain |
type |
protocol |
1 |
PF_INET |
SOCK_STREAM |
IPPROTO_TCP(0) |
2 |
PF_INET |
SOCK_DGRAM |
IPPROTO_UDP(0) |
'Network Programming' 카테고리의 다른 글
[TCP/IP]TCP/IP 프로토콜 스택(4계층) (0) | 2016.06.25 |
---|---|
[TCP/IP]주소 체계와 데이터 정렬 (0) | 2016.06.24 |
[TCP/IP]윈도우즈와 리눅스의 입/출력 함수 (0) | 2016.06.24 |
inet_addr과 htonl (0) | 2016.06.23 |
[TCP/IP]NBO(Network-byte-Ordering) : 네트워크 바이트 순서 (0) | 2016.06.22 |