ping : 네트워크 상태를 확인하기 위한 명령어
ICM : internet control message protocol 패킷을 보내게되고 이에대한 응답이 오는지 확인함 이때 응답에 대한 지연 시간이나 패킷 손실 등의 정보가 출력
ping 명령어는 네트워크 문제에 해결에 유용하게 사용
모두에게 필수적인 명령어다

ICMP
0x08 Echo Request(요청)
0x00 응답

클라이언트.py
# 필요한 모듈을 임포트합니다.
import socket

# 서버의 IP 주소와 포트 번호를 지정합니다.
server_address = ('192.168.0.210', 8888)

# 클라이언트 소켓을 생성합니다.
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 서버에 연결합니다.
client_socket.connect(server_address)

# 메시지를 보냅니다.
message = 'Hello, server!'
client_socket.sendall(message.encode())

# 서버로부터 메시지를 받습니다.
data = client_socket.recv(1024)
print(f'Server replied: {data.decode()}')

# 클라이언트 소켓을 닫습니다.
client_socket.close()
서버 접속
서버: listen, bind, eccept, 클라이언트: IP, port connect가 필요하다.

서버
# 필요한 모듈을 임포트합니다.
import socket

# 서버의 IP 주소와 포트 번호를 지정합니다.
server_address = ('localhost', 8888)

# 서버 소켓을 생성합니다.
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 서버 소켓을 지정한 IP 주소와 포트 번호에 바인드합니다.
server_socket.bind(server_address)

# 클라이언트로부터의 연결 요청을 기다립니다.
server_socket.listen(1)

while True:
print('Waiting for a connection...')
# 클라이언트의 연결 요청이 있을 때까지 대기합니다.
connection, client_address = server_socket.accept()

try:
print(f'Connection from {client_address}')
# 클라이언트로부터 데이터를 수신합니다.
data = connection.recv(1024)
print(f'Received {data.decode()}')

# 수신한 데이터를 클라이언트에게 다시 보냅니다.
connection.sendall(data)
finally:
# 클라이언트와의 연결을 닫습니다.
connection.close()
[서버와 클라이언트]
서버: 서버는 IP, port 그리고 listen, bind, accept가 중요하다~
클라이언트: IP, port 그리고 connect 중요하다~

서브넷마스크
255.255.255.0
0: 0000 0000
255.255.255.128
128: 1000 0000