![](https://velog.velcdn.com/images/mpfo0106/post/db328e17-a4d4-4fff-94a4-9fd56895771a/image.png)
추상화
소켓을 만들어서 TCP 레이어를 거쳐서 HTTP통신을 하게됨.
- 이 과정은 프로그래머에게 보여주지 않음 => 추상화
소켓 프로그래밍 비유 설명
![](https://velog.velcdn.com/images/mpfo0106/post/4719274a-7996-4c02-8a80-ba1ea1aacb47/image.png)
![](https://velog.velcdn.com/images/mpfo0106/post/1a4acf04-92d1-4975-ac4b-ce3db9d6d3a1/image.png)
연결요청이 가능한 상태의 소켓
- 연결요청이 가능한 상태의 소켓은 걸려오는 전화를 받을 수 있는 상태에 비
유할 수 있다.
- 전화를 거는 용도의 소켓은 연결요청이 가능한 상태의 소켓이 될 필요가 없
다. 이는 걸려오는 전화를 받는 용도의 소켓에서 필요한 상태이다.
연결요청의 수락
- 걸려오는 전화에 대해서 수락의 의미로 수화기를 드는 것에 비유할 수 있다.
- 연결요청이 수락되어야 데이터의 송수신이 가능하다.
- 수락된 이후에 데이터의 송수신은 양방향으로 가능하다.
정리하기!
연결요청을 허용하는 소켓의 생성과정
- 1단계. 소켓의 생성 socket 함수호출
- 2단계. IP와 PORT번호의 할당 bind 함수호출
- 3단계. 연결요청 가능상태로 변경 listen 함수호출
- 4단계. 연결요청에 대한 수락 accept 함수호출
클라이언트/ 서버 실행결과
![](https://velog.velcdn.com/images/mpfo0106/post/dd928f6e-3745-44d6-9970-189a269c30b7/image.png)
윈도우 vs 리눅스
![](https://velog.velcdn.com/images/mpfo0106/post/61a1bab5-e6b5-408b-9a19-9e2583b7445f/image.png)
리눅스에서의 파일 디스크립터에 해당하는 것을 윈도우에서는 핸들(HANDLE)이라 한다!
![](https://velog.velcdn.com/images/mpfo0106/post/8d7f0cfa-3a26-4004-be6e-d12072061c09/image.png)
![](https://velog.velcdn.com/images/mpfo0106/post/b7445afe-510d-4124-921d-d55c9ed3d8be/image.png)
소스코드를 통해서 다음 두 가지 사실을 관찰하자.
- 소켓의 생성과정에 따른 함수의 호출
- 리눅스 기반에서 호출했던 소켓 기반 입출력 함수에 어떠한 차이가 있는가?
=> 조사하자
윈도우에서는 별도의 입출력 함수를 사용
- 리눅스와 달리 파일과 소켓을 별도의 리소스로 구분한다.
- 때문에 파일 입출력 함수와 소켓 기반의 입출력 함수에 차이가 있다.
리눅스는 low level read,write 다 사용가능
참고자료:socket과 NIC 관계
sk 버퍼에는 포인터, 몇 바이트냐 정보만 가지고 있고, 이걸 가지고 언제든지 패킷을 만들어 낼 수 있다.
- 예제를 가지고 답변하는법.
- 풀 센텐스가 중요한게 아니라 키워드가 중요한것.