09/09 -1 Socket Functions

LEEHYUNJE·2024년 9월 11일

SOCKET FUNCTIONS

Socket Operation

Basic Operations Using Sockets

  • socket() 실행 시 , 파일 디스크립터 처럼 디스크립터 id를 반환해줌. 이를 사용해서 접근하는 방식.
  • TCP
    1.socket() 생성
    2.Bind(): 대부분 서버쪽에서 지정을 하게된다. 소켓을 특정 IP주소와 포트번호에 지정하는 부분.
    1. listen(): 서버쪽에서 요청을 받기위한 준비
    2. connect(): Client에서 3-handshake 시작
    3. accept(): 연결완료
    4. recv(), send()로 주고 받음
    5. close(): 종료
  • UDP
  1. socket() 생성
  2. bind(): 위와 같음
    3-1 클라이언트: sendto() 함수를 사용하여 데이터를 서버로 전송
    3-2 서버: recvfrom() 함수로 클라이언트로부터 데이터를 수신
  3. 데이터 수신 및 응답
  • 서버: 데이터를 처리한 후, sendto() 함수를 사용하여 응답을 클라이언트에게 본낸다.
  • 클라이언트 : recvfrom() 함수로 서버의 응답을 수신
  1. 소켓 닫기:
  • 통신이 완료되면 양쪽 모두 close() 함수를 호출하여 소켓을 닫는다.

Five elements for creating a socket

  • socket은 transprot Layer과, network Layer, kernel(OS) 모두와 연관되어 있음.
  • 생성할때, 현재 ip, port와 원격 ip, port가 존재해야한다.

socket() function

  • 소켓을 통해서 내부에서도 사용하여 다른 프로세스간 통신이 가능하다.
  1. 도메인
  • IP의 version이 몇인지 선택
  1. 타입
  • TCP, UDP 선택
  • SOCK_RAW는 바이패스시 사용할 수 있는 것들 -> 나중에 배울 것이다.
  1. protocol:

socket types and protocol

  • 여러개가 있지만, 안쓰는 것들이 많다 참고만 해라
  • socket 1,2,3만 사용해라

Type
타입 같은 경우는 그냥 0으로 쓰게 되면 자동으로 맞는 프로토콜로 사용된다.

TCP Connection Setup

3-way handshake

Socket programming viewpoint

  • 이런 것들은 이해만 해라.
  • 나중에 프로그래밍할때 디테일하게 진행될 것.

Closing Socket

close() function

  • 다 끝난다음 실행하는 close() 함수
  • close 함수에 들어가는 int 값은 소켓 discriptor number이다.

TCP Connection Termination

  1. 초기 상태:
    • 클라이언트와 서버 모두 ESTABLISHED 상태이다.
      -> ESTABLISHED 상태: TCP연결이 완전히 설정되어 데이터 전송이 가능한 상태.
  2. 클라이언트 연결 종료 시작:
    • 클라이언트가 socket.close()를 호출한다.
    • FIN_WAIT_1 상태로 진입하며, FIN 패킷을 서버로 보낸다.
    • 이 시점부터 클라이언트는 데이터를 보낼 수 없지만 받을 수는 있다.
  3. 서버 응답:
    • 서버는 CLOSE_WAIT 상태로 전환된다.
    • 클라이언트의 FIN에 대한 ACK를 보낸다.
    • 서버는 여전히 데이터를 보낼 수 있다.
  4. 클라이언트 대기:
    • 클라이언트는 FIN_WAIT_2 상태로 진입한다.
    • 서버의 FIN을 기다린다.
  5. 서버연결 종료:
    • 서버가 종료 준비를 마치면 LAST_ACK 상태로 전환된다.
    • 서버도 FIN 패킷을 클라이언트에게 보낸다.
  6. 클라이언트 최종응답:
    • 클라이언트는 서버에 FIN에 대한 ACK를 보낸다.
    • TIME_WAIT 상태로 전환되며, 2 * MSL(Maximum Segment Lifetime) 동안 대기한다.
  7. 연결 완전 종료:
    • 대기 시간 후 클라이언트는 CLOSED 상태가 된다.
    • 서버는 마지막 ACK를 받은 후 CLOSED 상태가 된다.

위 과정을 4-WAY HANDSHAKE 라고 한다.

MSL(Maximum Segment liftime)

  • 말만 해버리고, 먼저 꺼버리는 문제가 발생

shutdown() function

  • 위 문제를 해결하기 위한 함수

드는 생각 및 기록

  • 교수님께서 이부분은 당연히 알아야하는 곳이라고 하심
  • 코드 및 함수 관련 부분들은 외우는 것이 아닌 나중 네트워크 프로그래밍을 진행할때 이해가 안되는 부분은 여기서 보라고 하심.
    -> 내용을 이해하고, 필요상황에 사용할 수 있도록 숙련시켜라
profile
현재진행중

0개의 댓글