- Protocol header를 자동으로 채워줌
Ethernet frame, IP packet, Tcp segment , Udp datagram
- 특히 TCP에서 state관리
ex) SEQ/ACK, window size, time-out
- 동작 방식의 제어
데이터를 모아서 보낼지 or 한꺼번에 보낼지 or port 번호를 재활용할지
Network Socket Library
- 네트워크 계층을 손쉽게 접근할 수 있게 도와주는 라이브러리
Berkeley Socket API
- 각 socket을 위한 자료구조를 내부에서 관리
- API 함수 호출시 내부에 있는 특정 소켓을 지칭
-> 특정소켓을 지칭할때 "어떤 소켓"인지를 지칭하는 opaque handle을 방식을 이용
Socket은 쓰려는 기능에 따라 위치가 달라진다.
Layer 별 Socket Library 지원
- Layer 2 ( DataLink) -> Raw Socket(PF_PACKET)
- Layer 3 ( network) -> RAW Socket(AF_INET)
- Layer 4 (Transport) -
- TCP -> AF_INET + SOCK_STREAM
- UDP -> AF_INET + SOCK_DGRAM
AF_INET(Address Family Internet) - IPv4를 의미
PF_PACKET(Packet Family Packet) - 네트워크 타드와 직접통신 할때 사용
TCP(연결지향) vs UDP(비연결지향)
TCP는 특정상대와 한번만 pipe과정을 뚫으면 통신 관련 값을 기억하고 header로 전송하므로 그이후에는 별도 목적지 지정을 안해도된다.
UDP는 한번 정한 pipe가 없기에 매번 목적지를 지정해야함
Client Socket 과 Server Socket
server는 항상 찾을 수 있는 위치에 있어야 한다.
따라서, IP주소와 Port번호는 고정되어야한다.묶여 있어야 한다.
(bind함수 무조건 사용)
client도 bind를 사용 할 수 있지만 선택이다.
(특정 socket을 고집 하는 경우)
UCP vs TDP 함수
UCP(client)
socket( ) -> sendto( )
recvfrom( ) -> close( )
UCP(Server)
Socket( )
bind( )
sendto( )/recvfrom( )
close( )
TCP(client)
socket( )
connect()
sendto()/recv()
close()
TCP(server)
socket()
bind()
listen()
accpet()
send()/recv()
close()